递增浮点数的有效数

han*_*nno 2 c floating-point

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

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

APr*_*mer 8

C99有下一个和下一个; 他们不在C90.


Ste*_*non 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
Run Code Online (Sandbox Code Playgroud)

由于浮点数的编码方式,即使在跨越binade边界时也能正常工作; 请注意,当它过零时,它不会做"正确的事".