【发布时间】:2017-02-25 22:39:17
【问题描述】:
我正在尝试根据this formula 计算角度的正弦值,并向该函数提供两个参数:角度的度数和要计算的项数:
(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))))))))
如果我运行此代码,deg 为30 和terms 为10,它会输出:
-2.4237952736426853E44
这甚至不接近0.5,它是30 度的正弦值。如果我在每次迭代后在外部循环的开头打印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 本身的错误。
【问题讨论】:
标签: clojure trigonometry