我正在用蠻力搜索具有某些屬性(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