単純な計算は単に型を INTERVAL にすれば良い。例えば
test4.cpp |
// test4.cpp // g++ -I/usr/local/include/profil -o test4 test4.cpp -lProfil -lBias -llr #include <iostream> #include <iomanip> #include <Interval.h> using namespace std; int main(void) { int i, n; INTERVAL s; cout << setprecision(18); n = (int)1e6; s = 0; for (i = 1; i <= n; i++) s += 1 / Hull(i); cout << "1/1+1/2+…+1/" << n << "=" << s << endl; cout << "幅=" << Diam(s) << endl; s = 0; for (i = n; i >= 1; i--) s += 1 / Hull(i); cout << "1/1+1/2+…+1/" << n << "=" << s << endl; cout << "幅=" << Diam(s) << endl; return 0; } |
test4 の結果 |
[katsurada-no-MacBook-Air-4:~/work/tmp] mk% ./test4 1/1+1/2+…+1/1000000=14.39272672[19812922,37561250] 幅=1.77483272523204505e-09 1/1+1/2+…+1/1000000=14.392726722[7861861,9463354] 幅=1.60149227212968981e-10 [katsurada-no-MacBook-Air-4:~/work/tmp] mk% |
結果の相対精度は
.
回の演算をしたためか、精度が約
倍悪くなっている。
この手の計算では、情報落ち (積み残し) を防ぐために 逆から足せと言われるが、それをすると、約 1 桁改善されている。
桂田 祐史