第一段階は z を 5 より大きく「調整」することです。 単純な "for" ループがここで役立つでしょう。 もし z が 5 より小さかったら、 ψ(z) = ψ(z+1) - 1/z を使って問題を軽減します。 ψ(z+1) を再帰的に計算していって、戻るとき忘れずに -1/z の要素を足し戻します。 これを z > 5 となるまで繰返します。
(この定義は長いので、最後にまとめたものを付けておきます。 学習者はそれを M-# m で読込むことができます。 マクロ中で本体を Z ` Z ' で囲んで入力している限り、 Calc はそのキーストロークを実行せず単に学習するだけなのですが、 ここでは説明のため Calc があたかも実行したかのように図示します。)
1: 1. 1: 1. . . 1.0 RET C-x ( Z ` s 1 0 t 2
ここで変数1 は z を、変数2 は「調整補正値」を保持します。 z < 5 ならば、ループで z を増加させます。
(ところで、整数の 1 ではなく `1.0' から開始しました。 さもないと以下の計算は厳密な分数計算になってしまい、収束しなくなるからです。 何故なら、分数の比較は厳密に等しい場合のみイコールで、 「精度内で等しい」といった事が検出できないのです。)
3: 1. 2: 1. 1: 6. 2: 1. 1: 1 . 1: 5 . . RET 5 a < Z [ 5 Z ( & s + 2 1 s + 1 1 Z ) r 1 Z ]
さあ、合計の最初の部分を計算します。 ln(z) - 1/2z - 「調整補正値」 です。
2: 1.79175946923 2: 1.7084261359 1: -0.57490719743 1: 0.0833333333333 1: 2.28333333333 . . . L r 1 2 * & - r 2 -
今度は級数を計算します。 2 n を数え上げるのに別の "for" ループを使います。 (Calc は合計を計算するコマンド a + をちゃんと持っているのですが、 ループの修行を積みましょう。)
3: -0.5749 3: -0.5749 4: -0.5749 2: -0.5749 2: 2 2: 1:6 3: 1:6 1: 2.3148e-3 1: 40 1: 2 2: 2 . . . 1: 36. . 2 RET 40 Z ( RET k b TAB RET r 1 TAB ^ * /
3: -0.5749 3: -0.5772 2: -0.5772 1: -0.577215664892 2: -0.5749 2: -0.5772 1: 0 . 1: 2.3148e-3 1: -0.5749 . . . TAB RET M-TAB - RET M-TAB a = Z / 2 Z ) Z ' C-x ) (ESC TAB) (ESC TAB)
これが - γ の値で、丸め誤差を少し含んでいます。 12桁の精度で求めたかったら、さらに高い精度で計算しましょう。
2: -0.577215664892 2: -0.577215664892 1: 1. 1: -0.577215664901532 1. RET p 16 RET X
キーストロークの全手順をここにまとめます。
C-x ( Z ` s 1 0 t 2 RET 5 a < Z [ 5 Z ( & s + 2 1 s + 1 1 Z ) r 1 Z ] L r 1 2 * & - r 2 - 2 RET 40 Z ( RET k b TAB RET r 1 TAB ^ * / TAB RET M-TAB - RET M-TAB a = Z / 2 Z ) Z ' C-x )
Go to the first, previous, next, last section, table of contents.
利用度数