【问题标题】:IEEE 754: is v *= -1 always guaranteed to be the same as v = -v?IEEE 754:v *= -1 是否总是保证与 v = -v 相同?
【发布时间】:2021-01-26 03:27:28
【问题描述】:

标准 (IEEE 754 / C) 是否保证以下代码中的断言永远不会失败?

int main()
{
    for ( /* all possible float / double values */ )
    {
        v_neg1 = v * -1;
        v_neg2 = -v;
        assert( v_neg1 == v_neg2 );
    }
    return 0;
}

更新。

  1. 我的意思是 all possible float / double values不包括 NaN。
  2. 查看类似问题:.NET decimal.Negate vs multiplying by -1

【问题讨论】:

    标签: c floating-point double ieee-754


    【解决方案1】:

    不,这不一定是真的,因为 NaNs 从不相互比较。

    除此之外,鉴于符号位独立于指数和绝对有效数,我相信所有普通值都是如此。 C 指 ISO/IEC 60559 / IEEE 754 附录;可惜我自己没有这个标准。

    #include <math.h>
    #include <assert.h>
    
    
    int main(void)
    {
        double v, v_neg1, v_neg2;
    
        v = NAN;
        v_neg1 = v * -1;
        v_neg2 = -v;
        assert( v_neg1 == v_neg2 );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-31
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 2018-08-16
      • 2018-03-22
      • 2019-07-30
      相关资源
      最近更新 更多