【发布时间】:2011-02-28 02:19:47
【问题描述】:
我正在用蛮力搜索具有某些属性的浮点数(sin(a)^2+cos(a)^2-1 的小舍入误差)。因此,我想通过增加有效数字来循环给定浮点数的邻域。
在 C 中有没有一种简单的方法可以做到这一点?
【问题讨论】:
标签: c floating-point
我正在用蛮力搜索具有某些属性的浮点数(sin(a)^2+cos(a)^2-1 的小舍入误差)。因此,我想通过增加有效数字来循环给定浮点数的邻域。
在 C 中有没有一种简单的方法可以做到这一点?
【问题讨论】:
标签: c floating-point
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
由于浮点数的编码方式,即使跨越binade边界也有效;请注意,当它越过零时,它不会做“正确的事情”。
【讨论】: