C++ 为什么浮点数的精度问题会因值而异?
我想知道为什么不同值的浮点数的精度问题不同:C++ 为什么浮点数的精度问题会因值而异?,c++,floating-point-precision,double-precision,C++,Floating Point Precision,Double Precision,我想知道为什么不同值的浮点数的精度问题不同: #include <iostream> #include <iomanip> int main () { std::cout << std::setprecision(20); double d1(1.0); std::cout << d1 << std::endl; double d2(0.1); std::c
#include <iostream>
#include <iomanip>
int main ()
{
std::cout << std::setprecision(20);
double d1(1.0);
std::cout << d1 << std::endl;
double d2(0.1);
std::cout << d2 << std::endl;
return 0;
}
#包括
#包括
int main()
{
std::cout您的计算机使用浮点表示法,其中1.0
可以准确存储,但0.1
不能。这可能是错误的
前导零不被视为精度的一部分(它们只是占位符);您的输出实际上有20位数字,不计算0。
开始时。有些数字可以用二进制浮点格式精确表示,其他数字只能近似表示。请通读以了解引擎盖下的情况。但是,当您看到1
并且它是双精度或浮点型时,千万不要假设它是双精度或浮点型精确为1;始终使用浮点“逻辑”例如,当进行比较时。@Evert:您成功地从两个异常中选择了一个。精确的1.0和精确的0.0确实经常出现。@mAlter是正确的,但这更像是一个一般性的注意事项;至少如果打印出来,我仍然不相信1.0是1.0。我遇到了value==0.0
比较,这些比较主要是为了测试value已设置为其默认值以外的其他值。对于值==1.0的情况,不确定/不好奇。