2011-02-28 151 views
2

我正在用蠻力搜索具有某些屬性(sin(a)^ 2 + cos(a)^ 2-1)的小的舍入誤差的浮點數。因此,我想通過遞增有效位數來遍歷給定浮點數的鄰域。增加浮點數的有效位數

在C中有一種簡單的方法嗎?

回答

8

C99有nextafter和nexttoward;他們不在C90中。

+0

這就是我所希望的答案。謝謝! – hanno

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 

的,因爲這樣浮點數被編碼,甚至在跨越邊界邊界時也可以工作;只是要意識到,它在過零時不會做「正確的事」。