【发布时间】:2012-06-24 23:07:35
【问题描述】:
考虑 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;
非常感谢。
【问题讨论】:
-
你注意到 x prev next != x?
-
你是说你不想要 (x+1) 而是增加尾数时的值?
-
是的,我不想要 x+1 而是 x +/- epsilon(它是在考虑可能的精度问题的情况下检查边界)
标签: c++ floating-point limits epsilon