
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 呢? 展开
#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 呢? 展开
2个回答
展开全部
我猜有两种可能性:
printf 把 long double 当作 double 处理。尽管它输出 16 位有效数字,但在内存中仍为 long double。
编译器根本就不支持 long double。你最好换一个完美支持 ANSI C 标准的编译器。
C 语言的默认浮点数类型就是 double,所以才会出现那么多把其他浮点数类型视为 double 的场面。不过我认为一般不需要把数值精确到 18~19 位。long long、long double 等类型属于 C 语言的社会边缘人,很少有库函数会特意为它们着想。
追问
是否能推荐一款“
完美支持 ANSI C 标准的编译器。
”呢?
追答
Dev-C++,用的是 GCC,尽管 IDE 界面不大友好,调试器也很烂,但真的很标准
展开全部
printf("x=%f\n",x);
中%f只会显示float的样式...
应该用%Lf
中%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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询