n=5일 때 내 컴파일러와 OS로 pow(n,2)가 24를 반환하는 이유는 무엇입니까?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n,i,ele;
n=5;
ele=pow(n,2);
printf("%d",ele);
return 0;
}
출력은24
.
코드:: GNU/GCC를 사용하고 있습니다.블록들.
무슨 일입니까?
알아요.pow
함수는 a를 반환합니다.double
,그렇지만25
int 타입에 들어맞는데 왜 이 코드는 a를 출력합니까?24
대신에25
? 만약에n=4; n=6; n=3; n=2;
코드는 작동하지만 5개의 경우에는 작동하지 않습니다.
여기서 발생할 수 있는 일이 있습니다.당신은 당신의 컴파일러의 구현을 보고 이것을 확인할 수 있을 것입니다.pow
함수:
올바른 #include's를 가지고 있다고 가정하면 (이에 대한 이전의 답변과 코멘트가 모두 정확합니다) -- 를 받아들이지 마십시오.#include
파일 당연), 표준 프로토타입pow
함수는 다음과 같습니다.
double pow(double, double);
그리고 당신은 전화를 합니다.pow
다음과 같이:
pow(5,2);
그pow
함수는 알고리즘(로그를 사용하는 probably)을 거치기 때문에 부동 소수점 함수와 값을 사용하여 거듭제곱값을 계산합니다.
그pow
함수는 또한 계산해야 하기 때문에 순진한 "x의 값을 총 n번 multiply하라"는 과정을 거치지 않습니다.pow
분수 지수를 사용하면 분수 거듭제곱을 계산할 수 없습니다.
그래서 더 많은 가능성이 있습니다.pow
모수 5와 2를 사용하면 약간의 반올림 오류가 발생했습니다.에 할당한 경우int
, 분수 값을 절단하여 24를 산출했습니다.
정수를 사용하는 경우 필요한 횟수만큼 값을 단순히 곱하는 자신의 "intpow" 또는 유사한 함수를 작성할 수 있습니다.이점은 다음과 같습니다.
다음을 사용하여 미묘한 반올림 오류가 발생할 수 있는 상황은 발생하지 않습니다.
pow
.당신의.
intpow
기능은 동일한 호출보다 더 빨리 실행될 가능성이 높습니다.pow
.
2배수를 위한 함수의 결과값을 구하려고 합니다.
당신은 아마도 사용해야 할 것입니다.
ele=(int)(0.5 + pow(n,2));
/* ^ ^ */
/* casting and rounding */
비록 작은 값들이 정확히 더하고 뺄 수 있지만,pow()
함수는 일반적으로 로그를 곱하여 작동하므로 입력이 모두 정확하더라도 결과는 그렇지 않습니다.할당 대상int
항상 잘라내기 때문에 부정확성이 음수이면 25가 아니라 24가 됩니다.
이 이야기의 교훈은 정수에 정수 연산을 사용하고 의심하는 것입니다.<math.h>
실제 인수가 승격되거나 잘릴 때 함수입니다.유감스럽게도 GCC는 추가하지 않으면 경고를 하지 않습니다.-Wfloat-conversion
(들어있지 않음)-Wall -Wextra
일 것입니다 입니다).
() 나눗셈을 사용하는 더 하고 빠릅니다.pow()
-오!그러나, 범람의 위험에 유의해야 합니다.
과 같습니다.double
하는 중입니다.int
자릅니다.
이할 수 .pow
.double
아니면float
변수.
그래서 기본적으로
번역하면 다음과 같습니다.exp(log(x) * y)
입니다와 낼 다x^y
에 가깝습니다. -다.를 들면면.5^2
될 것입니다.24.9999996
아니면25.00002
언급URL : https://stackoverflow.com/questions/25678481/why-does-pown-2-return-24-when-n-5-with-my-compiler-and-os
'bestsource' 카테고리의 다른 글
AJAX와 함께 워드프레스 사용자 지정 메타박스 입력값 (0) | 2023.10.11 |
---|---|
테이블 이름 tb1을 잠그려고 하는데 PHPmyAdmin을 사용하여 잠글 수 없습니다. (0) | 2023.10.11 |
트랙터 - 리피터의 요소 수를 세고 인쇄합니다. (0) | 2023.10.11 |
루프가 있는 프로그램은 CTRL + C로 종료되지 않습니다. (0) | 2023.10.11 |
Write-Host 문을 파일로 리디렉션 (0) | 2023.10.11 |