C语言中关于long double 的问题

我急切的想问大家一下,#include<stdio.h>main(){longdoublex;x=2222222222.222226666L;printf("x=%f\n... 我急切的想问大家一下,
#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 呢?
展开
 我来答
盗墓者fgh
推荐于2017-10-08 · 超过11用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:31.7万
展开全部

我猜有两种可能性:

  1. printf 把 long double 当作 double 处理。尽管它输出 16 位有效数字,但在内存中仍为 long double。

  2. 编译器根本就不支持 long double。你最好换一个完美支持 ANSI C 标准的编译器。

C 语言的默认浮点数类型就是 double,所以才会出现那么多把其他浮点数类型视为 double 的场面。不过我认为一般不需要把数值精确到 18~19 位。long long、long double 等类型属于 C 语言的社会边缘人,很少有库函数会特意为它们着想。

追问
是否能推荐一款“

完美支持 ANSI C 标准的编译器。
”呢?
追答
Dev-C++,用的是 GCC,尽管 IDE 界面不大友好,调试器也很烂,但真的很标准
hiczb
2013-07-19 · TA获得超过226个赞
知道小有建树答主
回答量:133
采纳率:100%
帮助的人:194万
展开全部
printf("x=%f\n",x);
中%f只会显示float的样式...
应该用%Lf
更多追问追答
追问
%Lf是“错的,无效”
追答
编译器什么版本,有何提示,应该不会智能到提示“错的,无效”吧
我这里gcc3.2 gcc4.7 gcc 4.8 Tiny C均可以使用
man手册里
format '%f' expects type 'double'
format '%Lf' expects type 'long double'
可能是编译器的问题...
众所皆知long double是C99新出的数据类型
而VC是至今最不靠谱的编译器(与标准出入较大)
不过你可以试试用%llf
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式