gpt4 book ai didi

types - 为什么 IEEE754 单精度 float 只有 7 位精度?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:56:37 27 4
gpt4 key购买 nike

为什么单精度 float 具有 7 位精度(或 double 15-16 位精度)?

谁能解释一下我们是如何根据分配给 float(Sign(32) Exponent(30-23), Fraction (22-0)) 的 32 位得出的结果?

最佳答案

有效数的 23 个小数位 (22-0) 出现在内存格式中,但总精度实际上是 24 位,因为我们假设有一个前导 1。这相当于 log10(2^24) ≈ 7.225 十进制数。

double float 有 52 位小数,加上前导 1 是 53。因此 double 可以容纳 log10(2^53) ≈ 15.955 十进制数字,而不是 16。

注意:前面的 1 不是符号位。它实际上是 (-1)^sign * 1.ffffffff * 2^(eeee-constant) 但我们不需要在分数中存储前导 1。符号位仍必须存储


有些数不能表示为2的幂之和,比如1/9:

>>>> double d = 0.111111111111111;
>>>> System.out.println(d + "\n" + d*10);
0.111111111111111
1.1111111111111098

如果财务程序在没有 self 纠正的情况下一遍又一遍地进行此计算,最终会出现差异。

>>>> double d = 0.111111111111111;
>>>> double sum = 0;
>>>> for(int i=0; i<1000000000; i++) {sum+=d;}
>>>> System.out.println(sum);
111111108.91914201

经过 10 亿次求和后,我们丢失了超过 2 美元。

关于types - 为什么 IEEE754 单精度 float 只有 7 位精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19130396/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com