数学関数 |
双曲線正弦/余弦 |
最終更新日: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段とする。
|