我正在通过sqrt函数计算2147483647的平方根。结果必须是浮点值46340.95但我的代码返回值46341。 谁能告诉我问题出在哪里? 我正在使用代码:
double x=2147483647.0;
double y=sqrt(x);
cout<< y;
答案 0 :(得分:2)
我得到了同样的结果。但是,如果我注入setprecision
,我会得到正确的值:
#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;
}
给了我:
46340.95
事实上,如果您使用以下代码:
#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
因此,默认设置(至少对我的环境而言)似乎是零精度。
如果您想要特定格式,我建议您明确请求。
答案 1 :(得分:1)
这个简单的代码产生46340.9:
#include <cmath>
#include <iostream>
int main()
{
float x = std::sqrt(2147483647);
std::cout << x << std::endl;
return 0;
}
您的代码是什么样的?
(仅供记录:在MacOS X 10.6.6上使用GCC(g ++)4.5.2进行测试。)
答案 2 :(得分:1)
cout
的默认精度不足以显示结果的小数部分。您的结果是46340.95,四舍五入到精度的六位数是43641.0,并由cout
显示为43641。要显示更高的精度,请先设置cout
的精度:
double x=2147483647.0;
double y=sqrt(x);
cout.precision(9);
cout<< y;
在我的系统上显示结果为46340.95。