C++ next float with numeric_limits/epsilon?

标签 c++ floating-point limits epsilon

考虑 C++ 中的“正常”实数 TREAL x(不是次正规的也不是 NaN/Infinite)(TREAL = floatdouble, 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> 中有 nextafter、nextafterl 和 nextafterf 函数和 <cmath> .使用基本算术和 epsilon 实现它们会很乏味,因为您需要考虑四舍五入。使用二进制表示可能更容易,但我想知道符号和幅度表示的影响以及 -0.0 的存在(请参阅 Fred's answer 了解需要的内容)。

关于C++ next float with numeric_limits/epsilon?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11159774/

相关文章:

python - 正确设置 matplotlib 3d 图中的轴限制?

mysql - lamp 和 mysql 的限制,性能?

c++ - 使用增量的具有间隔的简单计数器

c++ - 需要帮助来理解 C++ 语法

c++ - 使用 Visual C++ 的 NaN ASCII I/O

delphi - 使 VarToDoubleAsString 使用 Delphi 设置(而不是操作系统设置)

c++ - 在非实例化函数模板中用作默认参数的不存在标识符

C++ 继承 : determine inherited methods at runtime

c - 从字符数组进行浮点检查以进行限制,字符检查正面和背面

python - Python 3 中的最大元组数组大小是多少?