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

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

ソフトウェア実験室

ネイピア数

最終更新:2007/02/10 一部修正

 既に、ネイピア数については、T8117 長いネイピア数 にて、高精度に求めているが、e の定義に基づいて値を求めてみた。

 多倍長で行った例は、ネイピア数2 で紹介している。

●定義

 オイラーによれば、ネイピア数(自然対数の底)は、

 e = lim(1 + 1/n)n [n → ∞]

である。よく見ると、1に限りなく近い数を、無限回掛け合わせることで得られる。真に、微妙なところで決まる神秘的な数である。

●実験内容

 n を128 から、億まで変えてみて、収束程度を観察する。

●実験方法

 ここでは、多倍長演算ではなく、ネイティブな浮動小数点で演算する。n、計算値、誤差などをリストする。開始のNと、試技回数を指定して、N は、前回の倍とする。

 今回は、Double で演算するため、1/N をきれいな二進数にすべく、N = 2k となるようにしている。これであれば、1/64 = [0.000001]二進 と、誤差のない値となるので、少しは正しくでる。

●結果

 N =  268,435,546 まで計算

●考察

 グラフから、結構早く収束している。N =  268,435,546 では、小数点以下8桁まで正しい。また、誤差は最後まで連続的の減少しているので、演算誤差はこの範囲では破綻していないことが伺える。

 より真値の近い値を望むなら、本法ではなく、別の方法が望ましい。

●実験のコード

演算は、Double で行う。冪乗演算は、自分で掛け合わしている。

frgPは結果表示のための自製グリッド
誤差の%をグラフにもしている。

Dim Ns As Integer = 64                    '開始のN
Dim Cnt As Integer = 22                  '実験回数
Dim Nep As Double = 2.718281828459   'ここでの真値

Dim i, k, N As Integer
Dim S As Single
Dim P, Q, Er As Double
Me.Cursor = Cursors.WaitCursor
frgP.SetGridConstruction(4, Cnt + 1, 0, 1)
frgP.RowHeader(0) = New String() {"N", "計算値", "誤差[%]", "-0.5%                 0%"} frgP.ColWidth(3) = 100
N = Ns
For i = 1 To Cnt
   N = N * 2
   P = 1 + 1 / N
   Q = P
   For k = 1 To N - 1
      P = P * Q
   Next
   frgP.BeginUpdate()
   frgP(0, i) = N
   frgP(1, i) = P
   Er = (P - Nep) / Nep * 100
   frgP(2, i) = Er
   S = 1.0 + Er/0.5
   If S <= 0.99 Then S = 0.99
   frgP(3, i) = New FreeGrid.CellStyle.Bar(S, 1.0, 1, Color.Red)  'グラフ表示
   frgP.EndUpdate()
   frgP.TopRow = i
   Application.DoEvents()
Next
Me.Cursor = Cursors.Default