c - 使用 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;
}
谢谢 ;)
解决方案
好吧,我用默认的 gcc 在 linux 上尝试过,问题很相似。看起来如果你想使用更高的精度,你必须使用外部库或自己实现你的算法。Gmp lib 非常适合。但是,如果 C 开发人员或 Iso 或其他任何选择一个标准,那就太好了……
推荐阅读
- asp.net-core - 为什么我需要将视图和控制器分别部署到 azure web app
- drop-down-menu - 如何选择在运行时加载的动态值下拉列表
- python - 使用反向参数创建函数的 Python 代码
- docker - Docker 容器无法连接到 ip 主机
- java - 如何使用Java在多个线程中复制文件
- amazon-web-services - 如果部署失败,Kubernetes 预删除钩子会阻止 helm 删除
- react-native - 由于我不知道在哪里引用视频或在哪里调用视频视图,我该如何处理此错误
- docker - 我可以从 dockerfile 中的 docker Image 中复制目录吗?
- function - perl:如何在函数中传递一个字符串和 2 个哈希?
- sql-server - SQL Server 数据库无法在不同的 PC 上运行