sqrt function에 의해 2147483647의 제곱근을 계산했습니다. 결과는 float 값 46340.95가되어야하지만 46341 값을 반환합니다. 아무도 문제가있는 곳을 말해 줄 수 있습니까? ? 내가 코드를 사용하고 :C에서 sqrt (2147483647)의 제곱근과 관련된 문제
는double x=2147483647.0;
double y=sqrt(x);
cout<< y;
sqrt function에 의해 2147483647의 제곱근을 계산했습니다. 결과는 float 값 46340.95가되어야하지만 46341 값을 반환합니다. 아무도 문제가있는 곳을 말해 줄 수 있습니까? ? 내가 코드를 사용하고 :C에서 sqrt (2147483647)의 제곱근과 관련된 문제
는double x=2147483647.0;
double y=sqrt(x);
cout<< y;
같은 결과가 나옵니다.
#include <iostream>
#include <iomanip>
#include <cmath>
int main (void) {
double x=2147483647.0;
double y=sqrt(x);
std::cout << std::setprecision(10) << y << std::endl;
return 0;
}
저를 제공합니다 : 나는 setprecision
를 주입한다면, 내가 올바른 가치를
46340.95
사실, 당신은 folowing 코드를 사용하는 경우 : 당신이 얻을
#include <iostream>
#include <iomanip>
#include <cmath>
int main (void) {
double x=2147483647.0;
double y=sqrt(x);
std::cout << y << std::endl;
std::cout << std::setprecision(0) << std::fixed << y << std::endl;
std::cout << std::setprecision(1) << std::fixed << y << std::endl;
std::cout << std::setprecision(2) << std::fixed << y << std::endl;
std::cout << std::setprecision(3) << std::fixed << y << std::endl;
return 0;
}
을 :
46341
46341
46341.0
46340.95
46340.950
그래서 ite appea rs는 기본 설정 (적어도 내 환경에서는 0)입니다.
의 경우 특정 형식을으로 지정하려면 명시 적으로 요청하는 것이 좋습니다.
이 사소한 코드는 46340.9 산출 :
#include <cmath>
#include <iostream>
int main()
{
float x = std::sqrt(2147483647);
std::cout << x << std::endl;
return 0;
}
같은 코드의 어떤 것일까?
는 (그냥 기록을 위해 :. 시험 GCC (g ++) 맥 OS X 10.6.6에 4.5.2을 사용하여)
cout
의 기본 정밀도는 결과의 소수 부분을 입증하기에 충분하지 않다. 결과는 46340.95이며 6 자리의 정밀도로 반올림되면 43641.0이며 cout
에 의해 43641로 표시됩니다. 내 시스템에서
double x=2147483647.0;
double y=sqrt(x);
cout.precision(9);
cout<< y;
이 46340.95의 결과를 보여줍니다 더 정밀도를 표시하려면 먼저 cout
의 정밀도를 설정합니다.
어떤 유형의 변수를 사용합니까? – Ishmael
코드를 표시하지 않으면 도움을 드릴 수 없습니다. –
코드가 무엇입니까? – Mehrdad