S1E16动动手第二题,我的小数位出了什么问题
本帖最后由 fishyu123 于 2018-4-12 15:05 编辑输出的结果应该是3.1415936,但是我保留七位小数输出的为什么是3.1415927呢,保留八位的话是3.14159267.好像是四舍五入了。我想知道哪里出了问题,谢谢大家
#include <stdio.h>
int main()
{
int i;
double result = 0;
double last =1;
int n;
for(n = 1;last >= 1e-8; n++ )
{
if(n % 2)
{
i = 1;
}
else
{
i = -1;
}
result = result + i * (1 / (2 * (double)n - 1));
last = (1 / (2 * (double)n - 1));
}
// printf("%.10f",last);
printf("%10.7f",result * 4);
return 0;
} 精度问题,你的结果没有问题 BngThea 发表于 2018-4-12 15:27
精度问题,你的结果没有问题
对啊,我就是想知道我的精度在哪里丢了,我隐藏的last我也查看了也没问题啊,我就是不知道我精度丢在哪里了 fishyu123 发表于 2018-4-12 16:48
对啊,我就是想知道我的精度在哪里丢了,我隐藏的last我也查看了也没问题啊,我就是不知道我精度丢在哪里 ...
#include <stdio.h>
int main()
{
double pi = 3.1415926535898;
printf("%.7lf\n", pi);
printf("%.8lf\n", pi);
printf("%.10lf\n", pi);
printf("%.15lf\n", pi);
int i;
double result = 0;
double last = 1;
int n;
for(n = 1; last >= 1e-8; n++)
{
if(n % 2)
{
i = 1;
}
else
{
i = -1;
}
result = result + i * (1 / (2 * (double)n - 1));
last = (1 / (2 * (double)n - 1));
}
// printf("%.10f",last);
printf("%10.7f", result * 4);
return 0;
}
3.1415927
3.14159265
3.1415926536
3.141592653589800
3.1415927请按任意键继续. . .
你这样通过循环计算出的pi值本来就不是“准确”的
可以看到result*4的结果是 3.1415926735902504
而“准确”的pi值是 3.1415926535898
另一方面,printf内部也帮你做了很多事 人造人 发表于 2018-4-12 18:46
你这样通过循环计算出的pi值本来就不是“准确”的
可以看到result*4的结果是 3.14159267359 ...
可是为什么小甲鱼的代码算出来的Pi值就很精确的,差异在哪里呢
#include <stdio.h>
#include <math.h>
int main()
{
int sign = 1; // 表示符号
double pi = 0.0, n = 1, term = 1.0; // n表示分母,term表示当前项的值
while (fabs(term) >= 1e-8) // 1e-8表示10^(-8)
{
pi = pi + term;
n = n + 2;
sign = -sign;
term = sign / n;
}
pi = pi * 4;
printf("pi = %10.7f\n", pi);
return 0;
} fishyu123 发表于 2018-4-12 22:26
可是为什么小甲鱼的代码算出来的Pi值就很精确的,差异在哪里呢
#include
都不“准确”呀,你要的结果是什么?
是 ≈
不是 =
通过这个公式算出来的结果是约等于pi,不是等于pi
pi是一个无限不循环小数,不存在等于pi这么一说
页:
[1]