了解浮点精度

Posted

技术标签:

【中文标题】了解浮点精度【英文标题】:Understanding floating point precision 【发布时间】:2012-08-21 01:16:06 【问题描述】:

是不是这样:

    可表示的浮点值在接近零的实数行中最密集? 随着数轴远离零,可表示的浮点值变得越来越稀疏(呈指数增长?)? 如果以上两个为真,那是否意味着距离零精度较低

总体问题:精度是否以某种方式指代或取决于您可以(准确)表示的数字的密度

【问题讨论】:

是的,你的理解是正确的。 我的理解是 precision 对于所有可表示的数字都大致相同(例如,指定值的位数)。但是,准确度会随着远离零而降低。 【参考方案1】:

术语精度通常是指表示值中有效数字(位)的数量。因此,精度随表示尾数中的位数(或位数)而变化。与原点的距离无关紧要。

你所说的真实线上的浮动密度。但在这种情况下,正确的术语是准确度,而不是精确度。小幅度的 FP 数字比大的要准确得多。这与整数形成对比,整数在其范围内具有统一的精度。

高度推荐论文What Every Computer Scientist Should Know About Floating Point Arithmetic,它涵盖了这一点以及更多内容。

【讨论】:

“准确度”可以指绝对准确度,对于浮点数,它有机会在接近零时更好,或者相对准确度,对于浮点数,它有机会保持一致。我认为,“精度”和“准确度”之间的区别更多地与“你拥有的位数”与“(某种计算)对它们的作用”有关。计算结果可以用 24 位二进制精度表示,但由于复合误差,(相对)精度仅为 2^-20。 你链接里的文章让我头疼。【参考方案2】:

浮点数基本上以科学计数法存储。只要将它们归一化,它们就始终具有相同数量的有效数字,无论您在数轴上的哪个位置。

如果您以线性方式考虑密度,那么当您接近 0 时,浮点数的密度会呈指数级增长。

当您非常接近 0 并且指数达到最低点时,浮点数变得非规范化。此时,它们有 1 个额外的有效数字,因此更精确。

【讨论】:

【参考方案3】:

答案:

    可表示的浮点值在接近零的实数行中最密集? 是的 随着数轴远离零,可表示的浮点值变得越来越稀疏(指数?)? 是的 如果以上两个为真,那是否意味着距离零更远的精度更低是的

总体问题:精度是否以某种方式指代或取决于您可以(准确)表示的数字的密度

见https://***.com/a/24179424

我也推荐What Every Computer Scientist Should Know About Floating Point Arithmetic

【讨论】:

【参考方案4】:

可表示的浮点值在接近零的实数线上最密集?

在 IEEE 754 浮点的完整实现中是的。

但是在不支持次正规的系统中,零附近存在一个间隙,该间隙远大于最小非零值与第二小的非零值之间的差。

随着数轴远离零,可表示的浮点值变得越来越稀疏(指数?)?

是的,每次该值超过 2 的幂时,相邻值之间的差距就会加倍。

如果以上两个为真,那是否意味着离零越远的精度越低?

这取决于您如何准确定义“精度”,可以从相对意义上(“重要数字”)或绝对意义上(“小数位”)谈论精度。

哪个更合适取决于这些数字的确切用途。如果浮点数用于坐标或时间戳等内容,则远离零时的精度损失往往会成为一个真正的问题。

【讨论】:

以上是关于了解浮点精度的主要内容,如果未能解决你的问题,请参考以下文章

IEEE-754浮点计算精度问题

Java中浮点类型的精度问题 double float

IEEE-754浮点标准简介

☕Java饭要一口一口吃,学Java先来了解清楚数据类型和运算符

5 Matlab 的变量与数据类型

了解浮点问题