C++计算比双精度或长双精度更精确
C++ calculating more precise than double or long double
我正在自学C++在这个练习题上,它要求编写可以将PI计算为>30位的代码。我了解到双/长双精度在我的计算机上都是精确的 16 位数字。
我认为这个问题的教训是能够计算超出可用精度的精度。因此,我该怎么做呢?可能吗?
我现在计算 Pi 的代码是
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
int main(){
double pi;
pi = 4*atan(1.0);
cout<<setprecision(30)<<pi;
return 0;
}
下面列出了输出为 16 位,pi 为 30 位以进行比较。
3.1415926535897931
3.141592653589793238462643383279
提高精度的任何建议,还是这永远无关紧要?或者,如果您认为我应该在这里学习另一节课,请随时提供。谢谢!
您需要使用浮点以外的其他方法执行计算。有用于进行"长数学"的库,例如GMP。
如果这不是您要查找的内容,您也可以自己编写代码来执行此操作。最简单的方法是只使用一个字符串,并为每个字符存储一个数字。做数学,就像你在纸上用手做一样。将数字相加相对容易,减法也相对容易。做乘法和除法有点困难。
对于非整数,您需要确保将小数点对齐以进行加/减...
写这是一个很好的学习经验,但不要指望它是你在半小时内不假思索地敲出的东西[也许加减!
您可以在 GCC/clang 中使用四元数学、内置类型 __float128
和 q
/Q
后缀。
#include <stdio.h>
#include <quadmath.h>
int main ()
{
__float128 x = strtoflt128("1234567891234567891234567891234566", nullptr);
auto y = 1.0q;
printf("%.Qf", x + y); // there is quadmath_snprintf, but this also works fine
return 0;
}
相关文章:
- Fmod 函数清楚地输出一个预期的双精度值,但 if(fmod == 预期的双精度值)的计算结果不是 true
- 为什么 2 个双精度值之间的差值计算错误?
- 如何使用 2 个迭代器进行求和函数计算映射<字符串、双精度>
- 通过更改代码格式来计算结构向量中包含的双精度变量的平均值的不同结果?
- C++ [链接器错误] 未定义对"执行计算(字符,双精度)"的引用
- 小数点后的数字,用于双精度变量/C++计算
- 如何计算双精度/浮点C++中的位数
- 涉及双精度数的计算
- c++ 如何计算涉及双精度数据类型模数的数学表达式
- 用C++计算小双精度数时出错
- 为什么我所有的双精度计算都在循环中给出相同的结果
- 用双精度计算 pow 会给出错误的结果
- c++ linux x86_64中如何控制双精度计算以避免舍入误差
- 在不切割变量的情况下计算双精度
- 在计算双精度值期间,错误计数增加
- 计算双精度数组中所有元素的和
- 按降序计算双精度
- 使用EXPECT_EQ计算双精度或浮点数的和时出错
- 浮点计算给出的结果与使用双精度计算的结果不同
- C++计算比双精度或长双精度更精确