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的情况,不确定/不好奇。