32位与64位、单精度(single-precision)与双精度(double-precision)

本文介绍了单精度和双精度浮点运算的区别,包括它们的精度范围、下溢阈值及内部表示方式。通过具体的例子展示了如何理解浮点数的组成,以及不同精度下数值表示的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

What’s the difference between a single precision and double precision floating point operation?

  • float:精度范围 10381038 10 − 38 ∼ 10 38
    • exp(102)1044 exp ⁡ ( − 10 2 ) ≈ 10 − 44 ,float 下溢
  • double:精度范围 1030810308 10 − 308 ∼ 10 308
    • exp(103)10434 exp ⁡ ( − 10 3 ) ≈ 10 − 434 ,double 下溢;

0. 64-bits CPU

如果说一个 CPU 是 64 位机,通常意味着,其具有 64 位的通用寄存器(general purpose register)以及内存地址空间的大小(memory address size),这与最终执行的数学运算,是单精度还是双精度,没有关系。

1. 单精度

S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
0 1      8 9                    31
  • 第 1 个 bit 位,表示的是符号位,S;
  • 中间 8 位,表示指数部分,E;
  • 末尾的 23 位,则表示小数部分,F;
  • E=0,F=0,S=1,=> -0
  • E=0,F=0,S=0,=> 0
  • 0
0 00000000 00000000000000000000000 = 0
    E=0,F=0,S=0,=> 0
1 00000000 00000000000000000000000 = -0
    E=0,F=0,S=1,=> -0
0 11111111 00000000000000000000000 = Infinity
1 11111111 00000000000000000000000 = -Infinity

0 11111111 00000100000000000000000 = NaN
    E=255,F 非零
1 11111111 00100010001001010101010 = NaN
    E=255,F 非零

0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2
0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5
    1.101 => 1+0.5+0.125=1.625
1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5

0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126)
0 00000000 10000000000000000000000 = +1 * 2**(-126) * 0.1 = 2**(-127) 
0 00000000 00000000000000000000001 = +1 * 2**(-126) * 
                                     0.00000000000000000000001 = 
                                     2**(-149)  (Smallest positive value)

2. 双精度

S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
0 1        11 12                                                63
  • 1 位;
  • 11 位;
  • 52 位;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值