服务器之家

服务器之家 > 正文

C语言菜鸟基础教程之单精度浮点数与双精度浮点数

时间:2021-06-04 14:18     来源/作者:翡翠森林Z

上节课 简单介绍了浮点数。计算机程序中的浮点数分为单精度浮点数和双精度浮点数。

单精度和双精度精确的范围不一样。

计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。
稍大一点的单位是字节(Byte,简写为B)。
再大一级的是千字节(kilo Bytes),用k来表示。
再大一级的单位是兆字节(Mega Bytes),用M来表示。一张照片的大小通常为1~3M。
再大一级的单位为G。一部高清电影的大小通常为1~2G。
再大一级的单位为T。

换算关系为:

1B = 8bit
1k = 1024B = 2^10 B
1M = 1024k = 2^20 B
1G = 1024M = 2^30 B
1T = 1024G = 2^40 B

单精度(float)在计算机中存储占用4字节,32位,有效位数为7位(6位小数+小数点)。
双精度(double)在计算机中存储占用8字节,64位,有效位数为16位(15位小数+小数点)。
不管是float还是double,在计算机中的存储都遵循IEEE规范,使用二进制科学计数法,都包含三个部分:符号位、指数位和尾数部分。其中float的符号位、指数位(即整数部分)、尾数部分分别为1, 8, 23。双精度则分别为1, 11, 52。

C语言菜鸟基础教程之单精度浮点数与双精度浮点数

float

C语言菜鸟基础教程之单精度浮点数与双精度浮点数

double

精度主要取决于尾数部分的位数,float为23位,最小为2的-23次方,约等于1.19乘以10的-7次方,所以float小数部分只能精确到后面6位,加上小数点算做一位,即有效数字为7位。
类似,double 尾数部分52位,最小为2的-52次方,约为2.22乘以10的-16次方,所以精确到小数点后15位,有效位数为16位。

程序验证:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main()
{
 
  float a = 1.123456789;
  printf("a = %20.9f\n", a);
  
  double b = 2.123456789;
  printf("b = %20.9f\n", b);
  
  return 0;
}

注意:这里%20.9f表示浮点数总共有20位,其中小数占9位。不足20位的部分,左侧用空格来填充。

运行结果:

?
1
2
a =     1.123456836
b =     2.123456789

从运行结果可以看出,单精度浮点数小数部分只有前6位是准确的,后三位是不准确的。双精度小数部分9位都是准确的。

原文链接:http://www.jianshu.com/p/74f7a0427662

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部