ホーム ] TIPS ] ソフトウェア実験室 ]

上へ
ビットマップの処理速度
色変換速度
数式演算速度
冪乗演算速度
検索速度
文字列処理速度
文字列/数値処理速度
CPU演算速度
TicksとPerformance Counter
文字の数値化
数値化文字の再現
数値化文字の補間
補間の効果
ネイピア数
ネイピア数2
指数関数近似値
級数の収束速度1
級数の収束速度2
級数の精度
逆三角関数を求める
算術幾何平均でπを求める
全フォルダ列挙
ビットマップとメモリリソース
配列とメモリリソース

ソフトウェア実験室

級数の精度

最終更新:2006/01/27 新規

 級数で展開された関数の近似値がどの程度確保できるか、確認してみた。関数は、sinで、sin(30度) = 0.5 を確認する。

●原理

○sin展開式

  sin(x) = (-1)k * x(2*k+1) /(2 * k + 1)!   [k = 0 to ∞]

○ラジアン

  度をラジアンに変換する。R = D * π / 180

●方法

 自作のUltraMathにて展開式を実際に演算し、値を確認する。1000桁まで求める。

●結果

○精度がでない!

 計算結果を1000桁印刷したが、どうも半分ぐらいしか出ていない。やはり、級数には限界があるのか?

 色々調べた結果、なんとラジアンに変換する時の π の精度が原因であった。上記の π は、500桁のものであった。下記が、定数 π の精度を指定して生成する文である。π は予め、10000桁求めて、文字列で持っている。

   Friend Shared umPI As New UltraLong(strUPI.Substring(0, 500))

○ π の精度を1010桁で実験

   Friend Shared umPI As New UltraLong(strUPI.Substring(0, 1010))

 見事に、1000桁まで精度が出た。表示では、1000桁以降に有限の値(誤差)があることを示している。当然、絶対に、0.5 にはならない。

 ●考察

 級数展開は、正直であり、信頼できる。但し、定数の精度もキッチリ出しておかないといけない。当たり前であるが、少し、感動した。逆に、筆者が求めたπ も正確だと言うことになる。

 蛇足であるが、定数を常に最大の精度で使用すると、演算時間が幾何級数的に延びることになる。とくに乗算など。ループの中で定数を使う時は、最適な精度にして置くのが良い。