递增浮点数的有效数

时间:2011-02-28 02:19:48

标签: c floating-point

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

在C中有一种简单的方法吗?

2 个答案:

答案 0 :(得分:8)

C99有接下来和接下来;他们不在C90。

答案 1 :(得分:5)

如果您发现自己处于缺少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边界时也能正常工作;请注意,当它过零时,它不会做“正确的事情”。