给定一个任意有限的浮点数,有没有办法确定下一个可表示的浮点数?例如,给定1.0f,根据定义,下一个最大可表示的数字是1.0f + std :: numeric_limits< float> :: epsilon()。有没有一种方法可以合成任何值的epsilon - 而不仅仅是1.0f - 而不需要依赖于对机器如何表示浮点值的位置和/或显式知识?
答案 0 :(得分:21)
在C ++ 11中,您使用std::nextafter()
。缺少这一点,在C99系统上,您使用C数学库中的nextafterf
,nextafter
或nextafterl
(对于类型float
,double
和{分别为{1}}。
答案 1 :(得分:3)
int exponent;
significand= frexp(number, &exponent);
significand+= epsilon;
next= ldexp(significand, exponent);
这样做是提取尾数,用浮点epsilon递增尾数,然后重建浮点数。这应该是你可以通过摆弄尾数位(和尾数溢出的指数)得到的下一个可表示的数字。