13

私は自分自身にC++を教えていますが、この練習用の質問では、PIを30桁以上に計算できるコードを書くように求められます。私のコンピューターでは、double /longdoubleはどちらも16桁の精度であることがわかりました。

この質問の教訓は、利用可能なものを超えた精度を計算できるようにすることだと思います。したがって、どうすればこれを行うことができますか?出来ますか?

今の円周率を計算するための私のコードは

#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桁、円周率は30桁です。

3.1415926535897931
3.141592653589793238462643383279

精度を上げるための提案はありますか、それともこれは問題ではありませんか?あるいは、私がここで学ぶべきだと思う別のレッスンがある場合は、遠慮なくそれを提供してください。ありがとうございました!

4

2 に答える 2

10

浮動小数点以外の方法を使用して計算を実行する必要があります。GMPなどの「長い計算」を行うためのライブラリがあります。

それがあなたが探しているものでない場合は、自分でこれを行うコードを書くこともできます. 最も簡単な方法は、文字列を使用して、文字ごとに数字を格納することです。紙に手書きした場合と同じように計算してください。足し算は比較的簡単ですが、引き算も簡単です。掛け算と割り算は少し難しいです。

整数以外の場合は、加算/減算のために小数点を揃える必要があります...

それを書くのは良い学習経験ですが、あまり考えずに 30 分でノックアップできるとは思わないでください [足し算や引き算かもしれません!]

于 2013-02-01T00:26:58.533 に答える