【发布时间】:2011-09-15 01:53:06
【问题描述】:
给定一个任意的有限浮点数,有没有办法确定下一个可表示的浮点数是什么?例如,给定 1.0f,根据定义,下一个最大的可表示数是 1.0f + std::numeric_limits
【问题讨论】:
-
我不认为没有机器表示的一些小技巧和明确的知识就可以完成,但我对 std::numeric_limits
的东西不是很熟悉
标签: c++ floating-point
给定一个任意的有限浮点数,有没有办法确定下一个可表示的浮点数是什么?例如,给定 1.0f,根据定义,下一个最大的可表示数是 1.0f + std::numeric_limits
【问题讨论】:
标签: c++ floating-point
在 C++11 中,您使用 std::nextafter()。缺少这一点,在 C99 系统上,您可以使用 C 数学库中的 nextafterf、nextafter 或 nextafterl(分别用于类型 float、double 和 long double)。
【讨论】:
<tgmath.h> 中还有 nextafter() 类型泛型宏(C99 中的;我不知道 C++ 是否有)。
_nextafter。
int exponent;
significand= frexp(number, &exponent);
significand+= epsilon;
next= ldexp(significand, exponent);
它的作用是提取尾数,将其增加浮点 epsilon,然后重建浮点数。这应该是您通过摆弄尾数位(以及尾数溢出的指数)获得的下一个可表示数字。
【讨论】: