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,请问这是为什么?
å¨Cè¯è¨ä¸ï¼è¾åºdoubleç±»å(å精度å®å)以åfloatç±»å(å精度å®å)æ¶ï¼é»è®¤è¾åº6ä½å°æ°ã
æ¯å¦è¿æ ·ç代ç ï¼
double a = 1;è¾åºä¼æ¯
1.000000
ä½æ¯ææ¶å ä½ä¼æ¾å¾å¾é¿ï¼æ²¡å¿ è¦ãæ¯å¦è®¡ç®å¹³ååï¼ä¸å°ä¸¤ä½å°æ°å°±è¶³å¤äºã
å¯æ¯ææ¶å ä½åä¸å¤ï¼éè¦æ´å¤ä½å°æ°ï¼æ¯å¦è®¡ç®é«ç²¾åº¦å¹³æ¹æ ¹ã
è¿æ¶å¯ä»¥ç¨printfçæ ¼å¼æ§å¶ã
å¦æè¦è¾åºnä½å°æ°ï¼é£ä¹å¯ä»¥ç¨%.nlfçæ ¼å¼ãå ¶ä¸n为æ°åã
å¦è¦è¾åº10ä½å°æ°ï¼é£ä¹
printf("%.10lf\n", a);
å³å¯
类似çè¾åº1ä½å°æ°
printf("%.1lf\n", a);