首页 > 解决方案 > 如何计算 C 中欧拉数的 37 位小数?

问题描述

我有以下代码,它返回: 2.7182818284590455348848081484902650118 其中只有2.718281828459045是正确的,其余的都是错误的。

我正在使用以下参考:2.7182818284590452353602874713526624977 http://www.vaxasoftware.com/doc_edu/mat/nume15000.pdf

我的代码是:

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

#define EPSILON 1.0e-15

int main() {
    unsigned long long fact = 1;
    double e = 2.0, e0;
    int n = 2;
    do {
        e0 = e;
        fact *= n++;
        e += 1.0 / fact;
    }
    while (fabs(e - e0) >= EPSILON);
    printf("e = %.37f\n", e);
    return 0;
}

如果有人可以帮助我,我将不胜感激。太感谢了!

标签: carbitrary-precisioneulers-number

解决方案


我的代码是:

#include "gmp.h"

仅包含此标头不会魔术般地使用多精度算术;您必须使用GNU MP 手册中记录的适当功能

例如,您将使用

{
  mpf_t x;
  mpf_init2 (x, 100);
  ...

初始化 100 位精度的浮点数 x,并进行计算,您可以使用此处的函数,例如mpf_add添加 2 个这样的变量。


推荐阅读