我有以下代码,
float a = 0.7;
if(0.7 > a)
printf("Hi\n");
else
printf("Hello\n"); //Line1
和
float a = 0.98;
if(0.98 > a)
printf("Hi\n");
else
printf("Hello\n"); //Line2
这里 line1 输出 Hi
但 Line2 输出 Hello
。我假设会有一个关于双常量和 float 的特定标准,即它们中的任何一个在评估时都会变得更大。但这两个代码让我明白,当 double 常量变大而其他时候 float 变大时,情况就会出现。这背后有什么四舍五入的问题吗?如果是,请向我解释。我非常需要这个清晰的..
提前致谢
最佳答案
你所拥有的叫做representation error .
要了解发生了什么,您可能会发现首先考虑以不同精度(小数点后 3 位或小数点后 6 位)存储的 1/3、1/2 和 2/3 的十进制表示更容易:
a = 0.333
b = 0.333333
a < b
a = 0.500
b = 0.500000
a == b
a = 0.667
b = 0.666667
a > b
提高精度可以使数字略大、略小或具有相同的值。
同样的逻辑适用于二进制 float 。
关于任何人都可以简单地向我解释一下这个功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11422078/