关于C语言中双精度实型double表示和15位精度的问题

看到网上说double的表示方法是%lf,我还想知道double型的有效小数有多少位,就做了个小实验,结果如图。求高手解释double的15位的精度是从何说起的,该怎么验证?

楼主看图,请无视上面的fun函数。

追问

那个fun函数确实没起作用吧?因为没被调用哦。那就无视算了。是你做的图吧?但是你想说明什么呢?想说明.17和.10有起到作用么?好像与我的问题无关吧?

追答

给你看一下double的精度啊,我打印17位小数,15位还是准确的,到16位就不准确了。

下面的float也类似。
C默认输出浮点数小数位数是6位,要看更高精度的小数,需要指定小数输出位数的。

追问

这样我也证明了。谢了。我是看你的那个程序float型的似乎小数点后第7位也是精确的,想想可能是偶然,换个数字试了试,结果果然是只精确到小数点后第五位啊!~能加你个QQ好友么?要是再有问题,还得再请教啊!~谢谢。我QQ834641885,加我啊!!!不胜感激^-^

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-04
printf("%.14f\n%.14.f\n",a,b);
试试
其实系统不同,这些有效为数不一样,并不是硬性 规定
其实你可以包含下
#include <float.h>
然后
printf("%d\n",DBL_DIG,FLT_DIG);
来看看你的系统有多少有效数位追问

DBL_DIG,FLT_DIG是什么?我才疏学浅啊,看不懂。但是.14就无理取闹了吧?控制输出位数还怎么证明它的精度啊?

追答

哦,那意思就是小数点后多点位数,
printf("%.14f\n%.14f\n",a,b);
上面多了个点,不要太讲究吗,能懂就好嘛
其实输出double很少用%lf一说的

DBL_DIG代表你的平台上支持的double类型的有效数值的位数
FLT_DIG代表你的平台上支持的float类型的有效数值的位数
是在float.h这个头文件里面声明的

C语言中什么是Double型 求大神解说一下
实型有两种类型:一为单精度,float ;一为双精度,double型。这两种类型表示数的精度不一样,float有效数为7位,范围10的38次方,占4字节;double有效数为15位,范围10的308次方,占8字节。使用方法一样。

C语言中的double是最多多少位?
双精度实数,占用字节8。有效数字15~16(因为二进制转十进制问题)。数值范围-1.7*10负308次方~1.7*10的308次方。当有效数字全部是整数时,即整数有15~16位。C语言中,输出double类型(双精度实型)以及float类型(单精度实型)时,默认输出6位小数(不足六位以 0 补齐,超过六位按四舍五入截断)。...

c语言中double是什么意思(C语言中double是什么)
double是指双精度实型变量。占8个字节(64位)内存空间。其数值范围为1.7E-308~1.7E+308,双精度完全保证的有效数字是15位,16位只是部分数值有保证。由于C语言中的浮点值总是用双精度表示的,所以float型数据只是在尾部加0延长为double型数据参加运算,然后直接赋值。double型数据转换为float型时,...

C语言中float和double到底是什么意思,有什么区别,求解
是两种数据类型,float是单精度浮点型,能得到六位有效数字;double是双精度浮点型,可以得到十五位有效数字,而且取值范围比float的大的多

C语言中,实型数据和浮点型数据的关系
C语言的实型数据类型主要分为两种:单精度型和双精度型。单精度型的类型关键字为float,通常占用4个字节(即32位),提供约7位的有效数字精度。相比之下,双精度型的类型关键字为double,其占用的字节数为8个(即64位),能够提供约15到16位的有效数字精度。这意味着在涉及高精度计算时,双精度型比...

关于C语言中double型输出的问题
f格式化命令,float,double 默认只输出6位小数。但是float,double可以表示的浮点数范围及精度是不同的。例如1653 float a = 1.123456;float b = 1.12345679;例如:ble占8字节 对应的格式为%lf float占4字节 对应的格式为%f 当两个格式用反时,会造成程序读取数据并赋值时1653,赋值给变量时字节...

c语言里单精度和双精度怎么理解?
单精度和双精度顾名思义是两种精度的不同划分,单精度float是保证7位有效数字,double是保证16位有效数字。例:(float)(10%3)结果是1.000000即七位有效数字,(后面不一定全是0,计算机可随机选择数字,所以整数1不等于float或double的1)(double)(10%3)同理结果是:1.XXXXXXXXXX……后面有...

C语言中 double和float 的区别
这两个不是函数,是数据类型.float是单精度实型,用4个字节存储 double是双精度实型,用8个字节存储。在进行程序运算时,float型数据一律转换为double型数据,为自动类型转换。所以结果一样。但float,double两种类型数据精度不同,float型有效数字位数为6~7位,double为15~16位,二者有区别 ...

什么是单精度实型,什么是双精度实型,举个例子,它们有什么区别,有怎么判 ...
单精度实型用float表示,32位,精度6位;双精度实型用double表示,64位,精度15位,在精度要求高或者数值相差悬殊时用double。include "stdio.h"void main(){ float x=400.0\/3;double y=400.0\/3;printf("%.6f %.6lf\\n",x,y);x=1234567+0.01;y=1234567+0.01;printf("%.2f %.2lf\\...

请问c语言中double双精度和float单精度的数据存储范围是多少?_百度...
double: 8字节,-10^308~~10^308,有效数字15~16位。float:4字节,-10^38~~10^38,有效数字6~7位。^表示多少次方。

相似回答