考虑C++中的“正常”实数TREAL x
(不是非正规的,不是NaN/Infinite)(TREAL
= float
,double
和long double
)
以下是从浮点的角度查找上一个和下一个x
的好方法吗?
TREAL xprev = (((TREAL)(1.)) - std::numeric_limits<TREAL>::epsilon()) * x;
TREAL xnext = (((TREAL)(1.)) + std::numeric_limits<TREAL>::epsilon()) * x;
非常感谢你。
最佳答案
C99和C++ 11在<math.h>
和<cmath>
中具有nextafter,nextafterl和nextafterf函数。使用基本算术和epsilon来实现它们将很繁琐,因为您需要考虑到四舍五入。二进制表示的工作可能更容易,但是我想知道符号和幅度表示的效果以及-0.0的存在(有关所需内容,请参见Fred's answer)。