我正在用蛮力搜索具有某些属性(sin(a)^ 2 + cos(a)^ 2-1)的小的舍入误差的浮点数。因此,我想通过递增有效位数来遍历给定浮点数的邻域。增加浮点数的有效位数
在C中有一种简单的方法吗?
我正在用蛮力搜索具有某些属性(sin(a)^ 2 + cos(a)^ 2-1)的小的舍入误差的浮点数。因此,我想通过递增有效位数来遍历给定浮点数的邻域。增加浮点数的有效位数
在C中有一种简单的方法吗?
C99有nextafter和nexttoward;他们不在C90中。
如果你发现自己在一个向后的平台,缺乏nextafter()
,你总是可以使用联合(受约编译器进行强混叠假设某些谨慎):
union { double d; int64_t i; } number;
number.d = initialValue;
doSomethingWithTheDouble(number.d);
number.i++; // increment to next double value away from zero
的,因为这样浮点数被编码,甚至在跨越边界边界时也可以工作;只是要意识到,它在过零时不会做“正确的事”。
这就是我所希望的答案。谢谢! – hanno