浮点变量的等式在C中初始化为零

时间:2015-04-07 12:52:41

标签: c floating-point

据我所知,由于存储值的方式,不应对浮点数执行相等操作,而应执行阈值比较。但是当值设置为常量值时,使用相等是否安全,比如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上看到几个类似的问题。但我的问题是特定于一个赋予常数零的变量(不是一个操作的结果)。

2 个答案:

答案 0 :(得分:2)

假设您使用的是IEEE-754二进制格式,那么它是安全的,因为0.0可以在IEEE-754中完全表示。二进制格式中只有一个+0的表示形式(-0只有一个,并且还注明+0 = -0)。

答案 1 :(得分:2)

0.0IEEE-754中具有精确表示,因此如果将两个变量设置为0.0,则它们的比较应始终为真。但是,如果您的代码max确实始终是0.0,那么您也可以删除if块,因为它永远不会执行。