与浮子和双精度相关的概念

Concept related to precision of float and double

提问人:Hash Blog 提问时间:5/14/2021 最后编辑:phuclvHash Blog 更新时间:4/25/2022 访问量:117

问:

为什么 的精度在小数点后最多 6 位,而 的精度在小数点后最多 15 位?floatdouble

谁能给出一个数学解释

精度 IEEE-754 浮点精度

评论


答:

1赞 Eric Postpischil 5/14/2021 #1

说 or 的精度是某个十进制数字是草率的术语。 通常使用 IEEE-754 binary32 和 binary64 格式实现,它们分别使用 24 位和 53 位的有效值。(有效性是浮点表示的分数部分。它伴随着一个符号位和一个指数。这些格式的精度为 24 位和 53 位。floatdoublefloatdouble

精度足以使任何具有六位有效数字的十进制数字都可以精确地转换为六位十进制数字,从而产生相同的数字。(此处讨论的所有转换都使用四舍五入到最接近。六是极限;有些七位数的十进制数字在往返转换中无法存活。对于 ,限制为 15 位有效数字。floatfloatdouble

以下是我们如何找到限制。一个 24 位有效值可以表示 2 个24 个值。那是 16,777,216,所以它肯定能够表示从 0 到 9,999,999 的所有七位十进制数字。但是,如果我们想表示一些七位数的十进制数字 abcdefg•10 n,此区间中的最后一个十进制数字 9.999999•10 n,具有某种表示 f•2e。因为 10 的幂相对于 2 的幂是不规则的,所以 f 可能很小,这意味着我们没有完全在单个序列 0 到 16,777,215 中表示从 0.000000•10n 到 9.999999•10n 的数字。(我在这里掩盖了一些细节;有效值低于 222 的数字被重新缩放为正常范围内的另一个指数。但是在更精细的指数范围内可以提供更高的精度,所以这不是问题。相反,在某个时候出现了展期,指数增加了。因此,我们失去了一点精度。因此,我们可以保证的十进制位数在往返转换为以 b 为基数的 p 位的浮点格式后幸存下来的数位数为 floor((p−1)•log10b)。(该公式在 C 2018 5.2.4.2.2 12 中给出。float

评论

0赞 Peter O. 5/15/2021
埃里克:这里有一个关于类似话题的问题,我想你可以回答:stackoverflow.com/questions/67538534