C语言中用double还是溢出该怎么办,用long double时输出怎么表示

 我来答
四舍五不入6
高粉答主

2020-01-31 · 醉心答题,欢迎关注
知道答主
回答量:147
采纳率:100%
帮助的人:2.2万
展开全部

当数据精度要求不超过15位有效数字时,可以使用double;

当数据精度要求不超过19位有效数字时,可以使用long double;

如果有更高的精度要求,C语言并没有能直接解决这个问题的定义,应当使用数组,采用“高精度”算法。

扩展资料:

C语言中,双精度浮点(double)型,占8 个字节(64位)内存空间。其数值范围为-1.7E308~1.7E+308,双精度完全保证的有效数字最高是15位,变量定义时,可以简写为double。

long double

C 还提供了 long double 类型,目的是提供一种比 double 更加精确的类型。然而,C 标准仅仅规定 long double 至少要和 double 一样精确。

参考资料来源:百度百科-双精度浮点型

换钻6131
2017-07-20 · TA获得超过273个赞
知道答主
回答量:489
采纳率:0%
帮助的人:91.4万
展开全部
在C语言中,对于数值类型只有通过printf类函数输出这一种方式,比如printf, sprintf, fprintf等。这类函数输出时要求有格式符号,其中long double的格式符号为%llf以下是一个简单的参考代码,输出到标准输出设备。关于long double, 需要说明的是,在原始的C标准中是没有这个类型的,C99中才添加了该类型。而在C99及后续的规范中,对于该类型规定的也并不详细,只是要求long double类型在精度上需要不少于double的精度。于是就出现了有的编译器不支持long double, 而支持的编译器在实现上也有所区别,目前常见的long double有占用8字节,10字节,12字节和16字节四种,但输出格式都是相同的%llf。 如果想知道使用的编译器是如何实现的,可以用printf("%d", sizeof(long double));输出long double占用的空间值。1、float 单精度浮点,8个点,也就是32位数据。double 双精度浮点, 16个点,也就是64位数据。64个大小的东西往32个大小的位置放,肯定是放不下的,肯定就溢出了。2、float,数据以32位二进制形式存入内存单元双精度型:double,数据以64位二进制形式存入内存单元当一个变量的值超过了变量所能表示的范围时,将产生溢出。一个变量只能赋给与之类型相匹配的变量。基本上所有支持类型转换的语言,在高精度向低精度转换时会直接截取高位,所以低位会丢失另外你的第二个printf里边的输出格式控制符是%f(正确的应该是%lf),而变量是long double,在截掉低位之后发生数据丢失,所以会产生第一个结果.你把long去掉当然是正确的结果,至于在mac上和其他电脑的区别,只是机器的问题,但是值并没有改变C语言中float , double , long double三种类型的输入输出格式是有差别的,如果不正确使用,则会造成数据输入或输出的不正常,导致程序运行错误。printf函数在输出浮点数时,控制符可以一律用%f。比如:long double 是C99新出关键字,要使用,需要先确认编译器是否支持C99。如果编译不出错,则支持。否则可能不支持。支持情况下,可以如上进行定义,赋值运算操作与其它基本类型相同。输入输出时,使用格式字符%llf。2. float ,double ,long double默认输出都是小数点后6位,double 和long double 想要输出多的话,可以用格式符来输出printf("x=%.10lf\n",x); 这样就能输出小数点后10位。你的需求是什么,这是一个你想的需求,还是一个其他需求的抽象?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式