关于long double 的问题
发表在C语言图书答疑 2013-07-19
是否精华
版块置顶:
我急切的想问大家一下,
#include<stdio.h>
main()
{long double x;
x=2222222222.222226666L;
printf("x=%f\n",x);}

x=2222222222.222227
Press any key to continue

问:Long double 是18~19位。书中说“在编写实型常量时,L表示该常量为long double长双精度类型”。为什么结果不会是x=2222222222.222226666  呢? 
分享到:
精彩评论 1
cui_mrkj
学分:0 LV1
TA的每日心情
?
2020-08-20 13:57:19
2013-07-20
沙发
printf("x=%f\n",x);//如果不指定宽度,编译器默认输出小数点后6位小数,只能显示“.222227”
printf("x=%.9lf\n",x);//指定输出9位小数,就会把全部位数显示出来2222222222.222226600,但不是2222222222.222226666 
long double有效位18位,但vc下long double和double存储的都是15位。
你的整数部分有10个2,小数部分只能精确到第5位,就是15个2。超出部分是随机值。
如果你想验证它能精确到多少位小数,就不要加那么多整数位,你存0.1234567890123456789,按20的宽度输出,看里面有多少位是精确值,多实验几个数,避免偶然误差。
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照