了解浮点精度
Understanding floating point precision
是否存在以下情况:
- 可表示的浮点值在接近零的实数线上最密集
- 随着数字线远离零,可表示的浮点值变得越来越稀疏(指数?)
- 如果以上两个都是真的,那是否意味着离零的精度更低
总体问题:精度在某种程度上是指还是取决于你能(准确地)表示的数字的密度?
术语精度通常指所表示值中的有效位数(位)。因此,精度随表示尾数中的位数(或数字)而变化。与原点的距离没有任何作用。
关于实线上浮点数的密度,你所说的是正确的。但在这种情况下,正确的术语是准确性,而不是精确性。小震级的FP数要比大震级的精确得多。这与整数形成对比,整数在其范围内具有统一的精度。
我强烈推荐每一位计算机科学家应该知道的关于浮点运算的论文,该论文涵盖了这一点以及更多内容。
浮点数基本上是用科学记数法存储的。只要它们被归一化,它们就始终具有相同数量的有效数字,无论你在数字线上的哪个位置。
如果你线性地考虑密度,那么当你接近0时,浮点数的密度会呈指数级增加。
当你非常接近0,并且指数达到它的最低点时,浮点数就会被反规范化。在这一点上,它们有1个额外的有效数字,因此更精确。
可表示的浮点值在接近零的实数线上最密集?
在IEEE 754浮点的完全实现中是的。
然而,在不支持子范数的系统中,零附近存在一个间隙,该间隙大大大于最小非零值和第二小非零值之间的差。
随着数字线远离零,可表示的浮点值变得越来越稀疏(指数?)?
是的,每次值超过2的幂,相邻值之间的差距就会加倍。
如果以上两个都是真的,那是否意味着离零更远的精度更低?
这取决于你如何准确地定义";精度";,人们可以从相对意义("有效数字")或绝对意义("小数位数")来谈论精度。
哪个更合适取决于数字的确切用途。如果将浮点数字用于坐标或时间戳等内容,那么在远离零的情况下,精度的损失往往会成为一个真正的问题。
答案:
- 可表示的浮点值在接近零的实数线上最密集?是
- 随着数字线远离零,可表示的浮点值变得更稀疏(指数?否-它以双曲线方式减少)?是
- 如果以上两个都是真的,那是否意味着离零的精度更低?是
总体问题:精度在某种程度上是指还是取决于你能(准确地)表示的数字的密度?
请参阅https://stackoverflow.com/a/24179424
我还推荐每个计算机科学家应该知道的关于浮点算术的知识
- 正在尝试了解输入验证循环
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 了解 GLM- openGL 中的相机转换
- 正在将csv文件读取为双精度矢量
- C++我需要了解在哪里使用指针和双指针
- 如何深入了解明显的腐败
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 了解嵌套循环打印星号图案
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 如何打印boost多精度128位无符号整数
- 检查是否以特定精度给出双精度
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- C 字符串返回字符串的整数/双精度/长整型值
- 了解双精度转换与整数转换中的整数与截断关系
- 了解浮点精度