在 C语言中 双精度和单精度的数,小数点后面分别保留几位啊·······

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在 C语言中 双精度和单精度的数,小数点后面分别保留几位啊·······相关的知识,希望对你有一定的参考价值。

c语言中double和float的精度并不是按小数点后面多少位来算的
而是按有效数字来算
比如如果是精度为2个有效数字
0.21就是精确的
但是11.1小数点后面的都是不精确的

以下是单双精度的精确位
float 6-7
double 15-16追问

那请问一下为什么下面两个程序的计算数字的精度是一样的?
#include
main()

double a;
a=1.23546982+2.15239684;
printf("the MPG is %lf", a);



#include
main()

float a;
a=1.23546982+2.15239684;
printf("the MPG is %f", a);

追答

用乘法去验证
200001*200023 你试试看结果如何

参考技术A 6位,8位 参考技术B 双精度 小数点后面保留15位
单精度 小数后面保留7位

c语言中双精度浮点数(即double类型数据)的取值范围

c语言中双精度浮点数(即double类型数据)的取值范围,是怎么计算出来的?

双精度浮点数在计算机中的存储方式为:
一位符号位 s
11位指数位 E(移码表示,范围为:e=-1024到1023)
52位小数位 f
共计64位,8个字节
所表示的规格数为:1.f * 2^e ,1.f 约等于2 (1.1111111111111111111...=2 )
能表示的最小数约等于 -2*2^1023=2^1024
能表示的最大负数约等于 -2*2^-1024=-2^-1023
能表示的最大数约等于 2*2^1023=2^1024
能表示的最小正数约等于 2*2^-1024=2^-1023
当然,另有规定全0时代表0
所以:
负值取值范围-1.79769313486231570E+308 到 -4.94065645841246544E-324,
正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。
参考技术A 再推荐一个文章给你看,更详细的。认真读完,就知道了。要有耐心啊,比较长。

---

浮点数分为单精度(float)和双精度(double),根据IEEE754标准,float类型在计算机内部存储占4字节,double类型占8个字节。

无论是单精度还是双精度在存储中都分为三个部分:

符号位(Sign) : 0代表正,1代表为负
指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
尾数部分(Mantissa):尾数部分

float:符号 1 指数 8 尾数 23
double 符号1 指数 11 尾数 52
本回答被提问者和网友采纳

以上是关于在 C语言中 双精度和单精度的数,小数点后面分别保留几位啊·······的主要内容,如果未能解决你的问题,请参考以下文章

c语言中啥是单精度型和双精度型???各举个例子。。。

C语言有效位

C 语言中双精度浮点型精度怎样保留位数

c语言中啥算是实型数据?举例子!

单精度、双精度各有几位小数?

单精度小数点后面有几位?