给定数字的浮点分辨率
Floating point resolution at a given number
我想知道给定值周围浮点数的epsilon。
std::numeric_limits<floating_point_type>::epsilon()
只为数字 1.0 提供,而我希望一个函数可以处理任何数字。
有没有标准的库解决方案?如果没有 - 我应该如何实现该功能?
那么,找到紧靠值上方的 epsilon 的最简单解决方案(即从该值到下一个可表示值的距离(就是
std::nextafter(x, std::numeric_limits<floating_point_type>::infinity()) - x
同样,要找到低于该值的 epsilon,您可以这样做
x - std::nextafter(x, -std::numeric_limits<floating_point_type>::infinity())
请注意,如果 x 是 2 的精确幂,则这两个不会相同。
现在,有一个轻微的警告:计算出的 epsilon 高于FLT_MAX
将是无穷大(可以说这是正确的答案,但它与 IEEE-754 的舍入规则不太匹配(,无穷大以上的 epsilon 将是 NaN(嗯,我不知道我对此有何感受(。在所有其他情况下,结果将是准确的。
相关文章:
- 试试完美的正方形,你能给点小费吗
- 无法将结构注册为增强几何体3D点
- C++将浮点指针值舍入为小数位数
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 为什么在浮点中从大到小会引入更多的误差
- 是默认情况下分配给char数组常量的值
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何对点云数据进行排序
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 给定数字的浮点分辨率
- 为什么双精度引用值在分配给C++中的浮点变量时不会更改
- 最接近的一对点 用向量分而治之
- 超载分辨率在模板实例化点后找到功能
- 如何固定筛分键点的数量
- openCV三角剖分点导致NAN值
- 与 IPv4 点分十进制表示法匹配的 lex 模式
- 浮点分辨率似乎比应有的更受限制
- C++11如何打印出高分辨率时钟时间点
- 将IPv6地址转换为Internet标准点分十进制格式的ASCII字符串