据我所知,由于存储值的方式,不应对浮点数执行相等操作,而应执行阈值比较。但是当值设置为常量值时,使用相等是否安全,比如0?
void test() {
double max = 0.0;
do {
if (condition) {
if (max != 0.0) { // Is this safe
// myval is always a large positive number
max = min(myval, max);
} else {
max = myval;
}
}
} while (my_condition);
return myval;
}
我可以在StackOverflow上看到几个类似的问题。但我的问题是特定于一个赋予常数零的变量(不是一个操作的结果)。
答案 0 :(得分:2)
假设您使用的是IEEE-754二进制格式,那么它是安全的,因为0.0
可以在IEEE-754中完全表示。二进制格式中只有一个+0
的表示形式(-0
只有一个,并且还注明+0 = -0
)。
答案 1 :(得分:2)
0.0
在IEEE-754中具有精确表示,因此如果将两个变量设置为0.0
,则它们的比较应始终为真。但是,如果您的代码max
确实始终是0.0
,那么您也可以删除if块,因为它永远不会执行。