调和级数的实验 {1/n的和等于log(e)n ,n越大越精确}
在这里因为计算系统的限制,通过单位内的扩展来模拟n的扩大,效果也很明显,testfour比test更接近正确值。
(defun test ( sum a b)
(if (< a b)
(test (+ sum (/ 1.0 a ) )
(+ a 1)
b)
sum))
(defun testtwo ( sum a b)
(if (< a b)
(testtwo (+ sum (/ (/ 1.0 a ) 2)
(/ (/ 1.0 (+ a 0.5) ) 2))
(+ a 1)
b)
sum))
(defun testfour ( sum a b)
(if (< a b)
(testfour (+ sum (/ (/ 1.0 a ) 4)
(/ (/ 1.0 (+ a 0.25) ) 4)
(/ (/ 1.0 (+ a 0.5) ) 4)
(/ (/ 1.0 (+ a 0.75) ) 4))
(+ a 1)
b)
sum))
(test 0 1 1000)
(testtwo 0 1 1000)
(testfour 0 1 1000)
(log 1000)
(test 0 1 3000)
(testtwo 0 1 3000)
(testfour 0 1 3000)
(log 3000)