lhy0320 发表于 2019-4-2 10:59:28

萌新求问关于一道课后作业的问题,精度和运行时长



小甲鱼给的答案是:3.1415926;我自己写的代码给出的结果是3.1415927,我想知道我这精度损失在哪里,而且为什么我的代码运行时间明显长于小甲鱼的代码运行时长,是哪一步比较耗时啊?

小甲鱼的代码:
#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;
}


我的代码是:

#include <stdio.h>
#include <math.h>

int main()
{
    int i;
    double pi = 0, k = 1;

    for (i = 1; k>=1e-8; i++)
    {
      pi = pi + pow(-1, i-1) / (2 * i - 1);
      k = 1.0 / (2 * i - 1);
    }
    pi = 4 * pi;
    printf("pi=%.7f\n",pi);

    return 0;
}

BngThea 发表于 2019-4-2 11:27:27

pow函数的开销比较大

lhy0320 发表于 2019-4-2 11:46:32

BngThea 发表于 2019-4-2 11:27
pow函数的开销比较大

多谢~那请问为什么我的结果在最后和小甲鱼的答案有略微不同,一个是3.1415926,一个是3.1415927,是哪一步损失了精度?

BngThea 发表于 2019-4-2 11:50:50

lhy0320 发表于 2019-4-2 11:46
多谢~那请问为什么我的结果在最后和小甲鱼的答案有略微不同,一个是3.1415926,一个是3.1415927,是哪一 ...

可能是 k
但是一般来说除法精度都要比加减乘低
页: [1]
查看完整版本: 萌新求问关于一道课后作业的问题,精度和运行时长