首页 > 解决方案 > 使用 MinGW 编译时,long double 会给出错误的结果

问题描述

当我将long double类型更改为double时,它​​运行良好。问题是我需要更高的精度,但我不知道为什么我有一个长双精度-1 作为解决方案。

typedef long double big_num_t;
typedef unsigned int un_i;

long double suite(big_num_t x, big_num_t a2n_1, un_i n) {
    return ((-1) * ((a2n_1 * (2 * n - 1)) / (n * (2 * n + 1))) * (x * x));
}

int main() {
    big_num_t summ = 3;
    big_num_t temp = 3;
    for (un_i n = 1; n < 100; ++n) {
        temp = suite(3, temp, n);
        summ += temp;
    }
    summ *= (M_2_SQRTPI);
    printf("%Lf", summ);
    return 0;
}

谢谢 ;)

标签: cdoublemingw

解决方案


好吧,我用默认的 gcc 在 linux 上尝试过,问题很相似。看起来如果你想使用更高的精度,你必须使用外部库或自己实现你的算法。Gmp lib 非常适合。但是,如果 C 开发人员或 Iso 或其他任何选择一个标准,那就太好了……


推荐阅读