Dey*_*eya 1 c c++ floating-point precision
我已经问过这个问题了,但这个特定子部分的答案对我来说并不清楚.请参阅以下代码:
float f=2.5;
if (f==2.5)
printf("abc");
else
printf("xyz"); //prints abc
Run Code Online (Sandbox Code Playgroud)
我知道如果我们2.2取而代之2.5,它将输出相反的值,因为float被视为double和浮点nos.他们真的不应该等同吗?我想知道为什么有一个例外,数字有他们的最后一个十进制数字5.
2.5可以写成二元有理数,并且考虑到它的幅度足够小,它可以精确地表示在IEEE754浮点数中.2.25例如,也可以完美地表示.参考:https://en.wikipedia.org/wiki/Dyadic_rational
浮点数.实际上不应该等同
这只是一个经验法则.使用严格考虑的公差进行任意比较可能是有害的.浮点没有什么神秘之处.它只是大多数不能表示为小数(这是开发人员倾向于思考的),就是这样.
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |