一尘不染

检查浮点值是否等于0是否安全?

c#

我知道您通常不能依赖双精度或十进制类型值之间的相等性,但是我想知道0是否是特例。

虽然我可以理解0.00000000000001和0.00000000000002之间的不精确性,但0本身似乎很难弄乱,因为它什么也没有。如果您对某事一无所知,那就再也不是什么了。

但是我对这个话题不太了解,所以我不必说。

double x = 0.0;
return (x == 0.0) ? true : false;

那会永远返回true吗?


阅读 218

收藏
2020-05-19

共1个答案

一尘不染

它是 安全的
期望,比较将返回true当且仅当双变量具有完全相同的值0.0(在你原来的代码片段,当然,这种情况)。这与==操作符的语义一致。a == b表示“ a等于b”。

当在纯数学中相同计算的结果为零时,期望某些计算的结果在双精度(或更普遍地为浮点数)算法中为零是 不安全的 (因为它是 不正确的
)。这是因为当计算深入时,会出现浮点精度误差-这个概念在数学的实数运算中不存在。

2020-05-19