与浮点数和双精度相关的概念
Posted
技术标签:
【中文标题】与浮点数和双精度相关的概念【英文标题】:Concept related to precision of float and double 【发布时间】:2021-08-04 16:52:07 【问题描述】:为什么float的精度最高为小数点后6位,而double的精度最高为小数点后15位? 谁能给出一个数学上的解释?
【问题讨论】:
【参考方案1】:说float
或double
的精度是一些十进制数字是草率的术语。 float
和 double
通常使用 IEEE-754 binary32 和 binary64 格式实现,它们分别使用 24 位和 53 位有效位。 (有效数字是浮点表示的小数部分。它伴随着一个符号位和一个指数。)这些格式的精度是 24 位和 53 位。
精度足够,对于float
,任何具有六位有效数字的十进制数字都可以足够准确地转换为float
,以至于转换回六位十进制数字会产生相同的数字。 (这里讨论的所有转换都使用四舍五入。)六是极限;有一些七位数的十进制数字在往返转换中无法幸免。对于double
,限制为 15 个有效数字。
以下是我们找到限制的方法。一个 24 位有效数可以表示 224 个值。那是 16,777,216,所以它肯定能够表示从 0 到 9,999,999 的所有七位十进制数字。但是,如果我们想表示一些七位十进制数字a.bcdefg•10n,最后一个此区间中的十进制数字 9.999999•10n 有一些 float
表示 f•2e em>。因为 10 的幂相对于 2 的幂是不规则的,所以 f 可能很小,这意味着我们没有表示 0.000000•10n 的数字 到 9.999999•10n,有效数字完全在一个序列中,从 0 到 16,777,215。 (我在这里忽略了一些细节;有效数低于 222 的数字被重新调整为正常范围内的另一个指数。但是处于更精细的指数范围内会提供更高的精度,所以这不是问题。)相反,在某个时候发生了翻转,并且指数增加了。所以我们失去了一点精度。因此,我们可以保证在以 b 为基数的 p 位的浮点格式的往返转换中存活的十进制位数是 floor((p-1)•log10b)。 (该公式在 C 2018 5.2.4.2.2 12 中给出。)
【讨论】:
Eric :这是一个关于类似主题的问题,我认为您可以回答:***.com/questions/67538534。以上是关于与浮点数和双精度相关的概念的主要内容,如果未能解决你的问题,请参考以下文章