【问题标题】:Incrementing the significand of a floating-point number递增浮点数的有效位
【发布时间】:2011-02-28 02:19:47
【问题描述】:

我正在用蛮力搜索具有某些属性的浮点数(sin(a)^2+cos(a)^2-1 的小舍入误差)。因此,我想通过增加有效数字来循环给定浮点数的邻域。

在 C 中有没有一种简单的方法可以做到这一点?

【问题讨论】:

    标签: c floating-point


    【解决方案1】:

    C99有nextafter和nexttoward;它们在 C90 中不存在。

    【讨论】:

    • 这就是我所希望的答案。谢谢!
    【解决方案2】:

    如果您发现自己在一个缺少 nextafter( ) 的向后平台上,您始终可以使用联合(但要注意编译器会做出强别名假设):

    union { double d; int64_t i; } number;
    number.d = initialValue;
    doSomethingWithTheDouble(number.d);
    number.i++; // increment to next double value away from zero
    

    由于浮点数的编码方式,即使跨越binade边界也有效;请注意,当它越过零时,它不会做“正确的事情”。

    【讨论】:

      猜你喜欢
      • 2012-09-30
      • 2011-04-08
      • 2011-06-07
      • 1970-01-01
      • 2018-05-30
      • 2012-07-23
      • 2011-12-17
      • 2013-09-12
      • 1970-01-01
      相关资源
      最近更新 更多