计算 e

日期: 05 月 24日, 2014
标签:

计算公式

取近似值

该公式可以方便地用迭代法实现,代码如下

#include <stdio.h>

int main()
{
	int i;
	double sum = 1.0;

	for (i = 100; i >= 1; i--)
	{
		sum /= i;
		sum += 1.0;
	}
	printf("%1.15lf\n", sum);

	return 0;
}

程序运行结果为

gcc -o pi pi.c
./pi
2.718281828459045

高精度实现

高精度实现的代码如下

#include <stdio.h>

#define ARRAY_SIZE 2502
#define ITERATIONS 5000

int e[ARRAY_SIZE+1];

int main()
{
    int i, j;

    // e = 1.0;
    e[0] = 1000;
    for(i = ITERATIONS; i > 0 ; i--)
    {
        // e /= i;
        for(j = 0; j < ARRAY_SIZE; j++)
        {
            e[j + 1] += e[j] % i * 10000;
            e[j] /= i;
        }
        // e += 1.0;
        e[0] += 1000;
    }
    for(i = 0; i < 2500; i++)
    {
        printf("%04d", e[i]);
    }
    return 0;
}

误差分析

截断误差

截断误差

舍入误差

设数组e的大小为k+1,则每次运算的舍入误差不超过$\frac{1}{10^{4k}}$,则多次运算积累的舍入误差

参数选取

若要计算$\pi$的前N位有效数字,须满足

故取n和k满足下式即可

不妨取