当我将 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;
}
谢谢;)
答案 0 :(得分:0)
如果您需要一个以上的double,则wich是8bytes,是一个int或char数组,并为此类型创建自己的算术运算。这是确保能够存储数字的唯一方法,因为您不必担心数字的大小,因为至少在gcc中,long double和double都是8个字节,因此两者都存储相同的数字限制。
答案 1 :(得分:0)
好吧,我在Linux上使用默认gcc尝试过,问题是类似的。如果您想使用更高的精度,则必须使用extern库或自己实现算术。 Gmp lib是完美的。但是如果C开发人员或Iso或其他选择标准的人都很好...