首页 > 编程知识 正文

c语言双精度浮点数如何表示,c语言定义浮点数精度

时间:2023-05-04 12:17:00 阅读:228800 作者:2507

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

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

计算机里的最基本的存储单位用位(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。

float

double

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

类似,double 尾数部分52位,最小为2的-52次方,约为2.22乘以10的-16次方,所以精确到小数点后15位,有效位数为16位。

程序验证:

#include

int main()

{

float a = 1.123456789;

printf("a = %20.9fn", a);

double b = 2.123456789;

printf("b = %20.9fn", b);

return 0;

}

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

运行结果:

a = 1.123456836

b = 2.123456789

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。