让:
double d = 0.1;
float f = 0.1;
应该表达
(f > d)
返回 true
还是 false
?
根据经验,答案是true
。但是,我希望它是 false
。
由于 0.1
不能完美地用二进制表示,而 double 有 15
到 16
十进制数字精度,而 float 只有 7
。因此,它们都小于 0.1
,而 double 更接近 0.1
。
我需要对 true
的确切解释。
最佳答案
我想说答案取决于将 double
转换为 float
时的舍入模式。 float
有 24 位 binary 位精度,而 double
有 53 位。在二进制中,0.1 是:
0.1₁₀ = 0.0001100110011001100110011001100110011001100110011…₂
^ ^ ^ ^
1 10 20 24
因此,如果我们在第 24 位处 向上取整,我们将得到
0.1₁₀ ~ 0.000110011001100110011001101
大于精确值和更精确的 53 位近似值。
关于c++ - 0.1 float 大于 0.1 double。我以为是假的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19292283/