【发布时间】:2018-12-23 10:42:09
【问题描述】:
浮点数很棘手,因为许多自然算术性质不成立。
我认为这个特殊属性仍然成立,但我更愿意询问而不是被难以检测的错误击中。
假设d 是double 类型的任意变量。我可以假设在以下操作之后:
d *= 0;
以下检查将始终返回true?
d == 0
我想如果d 是正/负无穷大或NaN,这将不成立。但是,我还有其他需要注意的问题吗?
- 我听说在浮点数中实际上有两个零,即
+0和-0。如果d一开始是负数,d *= 0会返回-0吗?如果是,是否等于0? - 我听说浮点运算不准确。因此,乘以
0是否可能会返回类似于0.0000001或-0.000001之类的不等于0的东西?我的假设是这很可能是不可能的,但我没有足够的知识来支持这个假设,所以我更愿意问。 - 还有其他我没有预见到的问题吗?
【问题讨论】:
-
试试
d = Double.NaN。 -
"如果是,是否等于0" --> 注意
-0.0和+0.0具有相同的值,即使它们的符号不同。
标签: c# floating-point zero arithmetic-expressions floating-point-comparison