https://www.hackerrank.com/challenges/leibniz hereに示されているように、私はライプニッツの質問に取り組んでいます。1-1/3+1/5-1/7+1/9+... を計算します。シーケンスの各要素は、a(i)=(-1)^i/(2*i+1) として定義できます。 ) i を 0 から開始します。
この質問では、第 1 項から第 n 項までを加算して結果を出力する必要があります。私のプログラムは、基本的なテスト ケースに合格します。しかし、それ以外の場合は失敗します。
私のプログラムの誤りは、数値が十分に大きい場合の精度によるものだと思います。
結果の精度を向上させる方法を提供できる人はいますか?
double leibnitz(int n) {
double res = 0.0;
for (int i = 1; i <= n; i++) {
res += 1.0 / (2 * i - 1) * (i % 2 == 1 ? 1.0 : -1.0);
}
return res;
}