ホーム ] PC技術/システム技術 ] VB.NETプログラミング ] なるほどナレッジ ] インフォメーション ]

上へ
平方根
立方根
整数指数
実数指数(Exp)
実数指数(一般)
対数
正弦/余弦
正接
逆正弦/逆余弦
逆正接
双曲線正弦/余弦
双曲線正接
逆双曲線正弦
階乗評価関数
級数評価関数
演算時間評価関数

数学関数

双曲線正弦/余弦

最終更新日:2006/06/12

●概要

 とりあえず、双曲線関数も用意する。双曲線正弦/余弦については、変数の範囲が広いので範囲に応じて、定義式または級数で求める。

●級数

  ・sinh X = Σ X(2*k+1) /(2 * k + 1)!  [k = 0 to ∞]

 ・cosh X = Σ X(2*k) /(2 * k)!         [k = 0 to ∞]

 であるが、これは、sin、cos と同型で、収束傾向も同じ。但し、変数の範囲が頗る広い。

●方法検討

  • 定義式から直接求める。|X| > 1 の場合に有利かもしれない。
  • 級数から。三角関数と同じなので、|X| ≪ 1 で適用すればよいかも。
  • |X| を小さくして級数適用。

●|X| を小さくする

 実は、双曲線関数にも倍角公式があり、5倍角では、

 ・sinh5X = 16sinh5X + 20sinh3X + 5sinhX

 ・cosh5X = 16cosh5X - 20cosh3X + 5coshX

となる。三角関数と同じく、これを漸化式にできる。 X / 5m とする訳である。m=10 とすれば、1/106 できる。

●演算時間予測

○収束予測

  以下に、sinh/cosh の級数展開における目標精度(公称精度)に達するための級数演算回数をSeriesLastItem関数/2 で算出したものである。横軸は、変数のオーダである。-3、-6、-10、-13 、-17 は、変数オーダが0 の場合に漸化を施した段数、5、10、15、20、25 に相当するオーダである。

○級数の速度予測

 sinh の級数演算と漸化式の合計を見積もって見ると以下のようになる。変数はフル精度長の場合である。

図の、一番上の行は、級数の変数オーダで、その下の漸化式の段数に対応している。結果は、漸化式の演算時間も含んだ時間なので、各公称精度で一番短い時間が良いとなる。2048桁以上では、25段が速いと予測される。

●演算時間実測

 計算と実際は異なる。実際の方がより時間が掛かるのが常。また、定義式からの算出時間の比較も必要となる。しかし、精度が高くなると時間も掛かるので実測は困難となる。100万桁では数日間掛かってしまう。

 計測は、精度を16383桁までとし、変数の桁数もパラメータにした。8、16桁と精度桁/2、精度桁の4種類である。更に、変数のオーダもパラメータにした。3、0、-3、-6 である。これらについて、Exp法、級数、漸化法で実測した。いずれの場合も、Exp法より、級数あるいは漸化法が速いことが分かった。

No. 精度 オーダ Exp法 級数 漸化5段 漸化10段 漸化15段
1 256 8 3 16.65 mS 3.078 S 6.630 mS 5.771 mS 7.353 mS
0 12.14 mS 5.276 mS 3.745 mS 5.182 mS 7.092 mS
-3 9.909 mS 1.623 mS 3.091 mS 4.902 mS 6.980 mS
-6 9.479 mS 907.4 μS 2.831 mS 4.739 mS 6.780 mS
32 3 17.68 mS 3.391 S 9.361 mS 6.587 mS 7.843 mS
0 13.09 mS 8.889 mS 4.695 mS 5.690 mS 7.463 mS
-3 10.66 mS 2.694 mS 3.640 mS 5.235 mS 7.224 mS
-6 10.18 mS 1.498 mS 3.165 mS 5.028 mS 7.072 mS
128 3 19.02 mS 4.219 S 16.72 mS 9.068 mS 9.346 mS
0 14.39 mS 19.02 mS 7.468 mS 7.246 mS 8.614 mS
-3 11.79 mS 5.854 mS 5.249 mS 6.390 mS 8.224 mS
-6 10.93 mS 3.324 mS 4.367 mS 5.939 mS 7.904 mS
256 3 19.05 mS 4.297 S 17.32 mS 9.302 mS 9.756 mS
0 14.93 mS 19.99 mS 7.722 mS 7.463 mS 9.068 mS
-3 12.20 mS 6.231 mS 5.520 mS 6.587 mS 8.614 mS
-6 11.36 mS 3.612 mS 4.596 mS 6.090 mS 8.230 mS
2 1024 8 3 152.9 mS 20.08 S 54.69 mS 46.88 mS 58.59 mS
0 116.8 mS 41.45 mS 32.45 mS 41.35 mS 55.74 mS
-3 86.81 mS 15.50 mS 26.18 mS 39.06 mS 54.28 mS
-6 79.28 mS 9.174 mS 23.35 mS 37.50 mS 52.88 mS
32 3 159.6 mS 21.39 S 84.49 mS 57.59 mS 64.45 mS
0 129.6 mS 79.28 mS 44.50 mS 48.65 mS 60.61 mS
-3 99.70 mS 29.21 mS 33.65 mS 43.82 mS 57.73 mS
-6 90.91 mS 17.20 mS 28.57 mS 41.45 mS 55.99 mS
512 3 188.9 mS 30.36 S 308.0 mS 144.8 mS 117.6 mS
0 157.4 mS 348.2 mS 139.6 mS 103.1 mS 100.1 mS
-3 121.3 mS 129.9 mS 93.04 mS 83.75 mS 89.67 mS
-6 111.8 mS 77.55 mS 71.66 mS 73.66 mS 81.88 mS
1024 3 200.5 mS 31.52 S 321.4 mS 149.6 mS 120.4 mS
0 164.7 mS 382.8 mS 144.8 mS 107.7 mS 101.6 mS
-3 131.4 mS 142.7 mS 96.59 mS 86.59 mS 91.62 mS
-6 121.3 mS 85.65 mS 74.65 mS 76.39 mS 83.91 mS
3 4096 8 3 932.3 mS 1 M 40.0 S 506.3 mS 323.7 mS 337.1 mS
0 800.8 mS 450.0 mS 273.4 mS 260.4 mS 302.7 mS
-3 628.9 mS 195.3 mS 200.5 mS 226.6 mS 281.2 mS
-6 556.2 mS 120.4 mS 165.2 mS 207.8 mS 267.4 mS
32 3 1.099 S 1 M 46.5 S 875.0 mS 484.4 mS 434.9 mS
0 958.3 mS 901.0 mS 450.0 mS 364.6 mS 380.2 mS
-3 822.9 mS 388.0 mS 310.3 mS 305.8 mS 341.5 mS
-6 718.7 mS 239.6 mS 246.5 mS 269.5 mS 319.2 mS
2048 3 1.539 S 2 M 34.4 S 3.766 S 1.727 S 1.193 S
0 1.414 S 4.297 S 1.820 S 1.188 S 947.9 mS
-3 1.198 S 1.867 S 1.198 S 916.7 mS 802.1 mS
-6 1.073 S 1.151 S 895.8 mS 753.9 mS 703.1 mS
4096 3 1.539 S 2 M 39.9 S 3.937 S 1.812 S 1.255 S
0 1.414 S 4.641 S 1.891 S 1.245 S 994.8 mS
-3 1.208 S 2.016 S 1.245 S 963.5 mS 838.5 mS
-6 1.078 S 1.255 S 932.3 mS 793.0 mS 730.5 mS
4 16384 8 3 8.266 S 14 M 16.4 S 5.812 S 3.187 S 2.750 S
0 7.703 S 5.516 S 3.172 S 2.344 S 2.312 S
-3 6.531 S 2.688 S 2.187 S 1.906 S 2.016 S
-6 5.500 S 1.719 S 1.695 S 1.641 S 1.820 S
32 3 10.61 S 14 M 48.8 S 10.73 S 5.562 S 4.297 S
0 10.31 S 11.22 S 5.719 S 3.969 S 3.484 S
-3 9.641 S 5.438 S 3.875 S 3.109 S 2.969 S
-6 7.969 S 3.500 S 2.969 S 2.625 S 2.625 S
8192 3 17.30 S 19 M 16.3 S 49.17 S 23.69 S 16.14 S
0 17.14 S 55.08 S 25.56 S 16.36 S 12.58 S
-3 15.45 S 26.67 S 17.27 S 12.48 S 10.31 S
-6 13.52 S 17.19 S 12.86 S 10.16 S 8.797 S
16384 3 17.38 S 19 M 44.5 S 51.20 S 24.97 S 16.66 S
0 17.27 S 59.34 S 26.67 S 17.19 S 12.95 S
-3 15.55 S 28.72 S 17.87 S 13.12 S 10.62 S
-6 13.64 S 18.59 S 13.42 S 10.64 S 9.063 S

 

 変数の桁数で状況が変化しているが、あまり細かく対応できないので、大ざっぱに傾向を掴み方式を決定する。

●演算方式決定

 上表からエイヤッと以下の結論に達した。

  • Exp法は、変数のオーダが 3 を超過する場合に採用する。
  • 変数のオーダが 3 以下の場合は、
  • 精度が 4096 未満では、漸化段数を可変とする。漸化段数 N は、変数の指数を Ep とすれば、

     N = (5 / 3 ) * Ep + 5   (但し、15 ≧ N ≧ 0)     (5/3 は、上表から算出した係数)

      N = 0 は、漸化なしの級数を意味する。
     
  • 精度が 4096 以上では、全ての場合で、漸化段数15段とする。