C++计算比double或long double更精确

Ter*_*how 10 c++ precision

我正在自学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;
}
Run Code Online (Sandbox Code Playgroud)

输出为16位,下面列出了pi至30位以进行比较.

3.1415926535897931
3.141592653589793238462643383279
Run Code Online (Sandbox Code Playgroud)

任何提高精确度的建议还是这件事都不重要?或者,如果您认为我应该在这里学习另一课,请随时提供.谢谢!

Mat*_*son 10

您需要使用除浮点之外的其他方法来执行计算.有用于进行"长数学"的库,例如GMP.

如果这不是您正在寻找的,您也可以编写代码来自己完成.最简单的方法是只使用一个字符串,并为每个字符存储一个数字.如果您在纸上手工完成,那么就算数学一样.将数字加在一起相对容易,减法也是如此.进行乘法和除法有点困难.

对于非整数,您需要确保将加法/减法的小数点对齐...

写这个是一个很好的学习经历,但是不要指望它是半小时内没有多想的东西[加减法,也许!]!