用MinGW编译时,long double给出错误结果

时间:2018-10-03 14:51:51

标签: c double mingw

当我将 long double 类型更改为 double 时,效果很好。问题是我需要更高的精度,而且我不知道为什么使用 long 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;
}

谢谢;)

2 个答案:

答案 0 :(得分:0)

如果您需要一个以上的double,则wich是8bytes,是一个int或char数组,并为此类型创建自己的算术运算。这是确保能够存储数字的唯一方法,因为您不必担心数字的大小,因为至少在gcc中,long double和double都是8个字节,因此两者都存储相同的数字限制。

答案 1 :(得分:0)

好吧,我在Linux上使用默认gcc尝试过,问题是类似的。如果您想使用更高的精度,则必须使用extern库或自己实现算术。 Gmp lib是完美的。但是如果C开发人员或Iso或其他选择标准的人都很好...