C语言 运行结果中为什么双精度实型只输出小数点后六位

n/2=1+1/3+1/3*2/5+1/3*2/5*3/7....,当最后一项小于输入值的时候,输出n#include"stdio.h"doublepi(doubleep... n/2=1+1/3+1/3*2/5+1/3*2/5*3/7....,
当最后一项小于输入值的时候,输出n

#include "stdio.h"
double pi(double eps)
{int i=1 ,j=3;
double t=1.0,p=1.0,pi;
while(t>=eps)
{t=t*i/j;
p+=t;
i++;
j+=2;
}
pi=p*2;
return pi;
}
main()
{double p,eps;
scanf("%lf",&eps);
p=pi(eps);
printf("%lf",p);
}

一个常见的题目,为什么我运行了之后输入的数再小,输出也只是3.141590,双精度应该可以输出更多位小数的 啊?
图片审核的时间太久了,还没出来。
问题是:比如我在输入0.0000000000000000000000000000000000000001的时候,输出的结果是35.134971,请问这是为什么?
展开
 我来答
风若远去何人留
推荐于2017-10-12 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450137
专业C/C++软件开发

向TA提问 私信TA
展开全部

在C语言中,输出double类型(双精度实型)以及float类型(单精度实型)时,默认输出6位小数。

比如这样的代码:

double a = 1;
printf("%lf\n", a);

输出会是

1.000000

但是有时六位会显得很长,没必要。比如计算平均分,一到两位小数就足够了。

可是有时六位又不够,需要更多位小数,比如计算高精度平方根。

这时可以用printf的格式控制。

如果要输出n位小数,那么可以用%.nlf的格式。其中n为数字。

如要输出10位小数,那么

printf("%.10lf\n", a);

即可


类似的输出1位小数

printf("%.1lf\n", a);

百度网友6e0c619
2009-03-10 · TA获得超过503个赞
知道小有建树答主
回答量:315
采纳率:0%
帮助的人:386万
展开全部
printf("%lf",p);
是一般输出形式默认是 6位吧
你 试试
printf("%.10f",p);
也许就 可以了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_一半疯子_
2009-03-10 · TA获得超过2006个赞
知道大有可为答主
回答量:1907
采纳率:50%
帮助的人:2010万
展开全部
只输出六位小数,这是默认的,可以改变,如:printf("%6",d)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pop3836
2009-03-10
知道答主
回答量:27
采纳率:0%
帮助的人:0
展开全部
楼上的回答是对的,printf要求你输出格式,默认6位小数,你可以指定输出几位
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pkwsh
2009-03-10 · 超过11用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:31.1万
展开全部
你可以自己设置输出精度的
printf("%.nf",p); n为你的精度
如:printf("%.6f",p); //输出为小数点后6位
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式