我正在用蛮力搜索具有某些属性的浮点数(sin(a)^ 2 + cos(a)^ 2-1的小舍入误差)。因此,我希望通过递增有效数来循环遍历给定浮点数的邻域。
在C中有一种简单的方法吗?
答案 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边界时也能正常工作;请注意,当它过零时,它不会做“正确的事情”。