2011-02-28 109 views
2

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

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

回答

8

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

+0

这就是我所希望的答案。谢谢! – hanno

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 

的,因为这样浮点数被编码,甚至在跨越边界边界时也可以工作;只是要意识到,它在过零时不会做“正确的事”。