与浮点数和双精度相关的概念

Posted

技术标签:

【中文标题】与浮点数和双精度相关的概念【英文标题】:Concept related to precision of float and double 【发布时间】:2021-08-04 16:52:07 【问题描述】:

为什么float的精度最高为小数点后6位,而double的精度最高为小数点后15位? 谁能给出一个数学上的解释

【问题讨论】:

【参考方案1】:

floatdouble 的精度是一些十进制数字是草率的术语。 floatdouble 通常使用 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。

以上是关于与浮点数和双精度相关的概念的主要内容,如果未能解决你的问题,请参考以下文章

1定点数与浮点数

单精度和双精度有啥不同?

使用浮点数和双精度时,c 中的 -0.0000 是啥?

将(n个第一个字节)无符号字符指针转换为浮点数和双精度C++

DSP中浮点数和定点数 dsp

定点数与浮点数