で生成された値を置き換えます。角度の度と計算する用語の量を:ループは、私が<a href="https://en.wikipedia.org/wiki/Sine#Series_definition" rel="nofollow noreferrer">this formula</a>に基づいた角度のサインを計算しようとしている、と私は、この関数には2つのパラメータを供給していますデフォルト
(defn factorial [n]
(if (= n 1) 1
(* n (factorial (dec n)))))
(defn sine-terms [deg terms]
(let [pi 3.14159
radians (* deg (/ 180 pi))]
(loop [a 0
sine 0]
(if (= a terms) sine
(let
[current-no (+ (* 2 a) 1)
temp
(/
(Math/pow radians current-no)
(factorial current-no))]
(recur
(inc a)
(if (= (mod a 2) 0)
(+ sine temp)
(- sine temp))))))))
私は10
として30
としてdeg
とterms
で、このコードを実行する場合は、出力:
-2.4237952736426853E44
へのサインである、0.5
にさえ近いされていません度。私はすべての反復後sine
を印刷するには、外側のループの先頭にプリントを入れた場合は、この出力:
0
1718.8748372639334
-8.46409695587649E8
1.250365792948E14
-8.7957538602188431E18
3.609314026964587E23
-9.694265426923215E27
1.835997368923122E32
-2.583053077880347E36
2.8057167260702447E40
-2.4237952736426853E44
出力はますます小さく、各時刻を取得します:私はループを捨てていることをかなり確信していますsine
が生成され、それを何らかの理由で0
に置き換えます。私はこれがコード自体(疑問に思う)やClojure自体のバグに問題があるかどうかはわかりません。
Dammit、私は出力を間違って読んだ、私はそれが 'E44'の代わりに' E-44'だと思った - この質問を削除すべきか? –
引数がどれほど大きいかにかかわらず、階乗は最終的に[-1、1]の値に収束するはずです。なぜなら、階乗分母が最終的に分子の力を圧倒するからです。間違いなく、そうするために膨大な数の用語が必要になることは間違いありません。結果は '-0.4097717985743482'と表示されます。 – Thumbnail