Lisp求平方根
Square root algorithm of Heron of Alexandria
為了找到x的平方根:
1.做出猜測guess
2.用guess和x/guess的平均數代替guess,提高精度
3.持續提高guess的精度直到滿足精度要求
4.用1作為初始guess
//求絕對值
(defun my-abs (x)
(cond ((< x 0) (- x))
((= x 0) 0)
((> x 0) x)))
//計算平均數
(defun my-average (x y)
(/ (+ x y) 2))
//計算guess和x/guess的平均數
(defun my-improve (guess x)
(my-average guess (/ x guess)))
//判斷是否滿足精度要求,此處精度為0.001
(defun good-enough? (guess x)
(< (my-abs (- (* guess guess) x)) 0.001))
//不斷提高guess的精度直到滿足要求
(defun my-try (guess x)
(if (good-enough? guess x)
guess
(my-try (my-improve guess x) x)))
//用初始值1來進行guess
(defun my-sqrt (x)
(my-try 1 x))
1.為了體會演算法,我特意將每個函式都做成了自己的版本
2.每個函式都是基於它上面函式的定義
以下是在lispbox-0.7中執行的結果:
可以看到輸出的結果都是符合精度的
不過Lisp並不適合用來作為科學計算的語言,這裡我只是想來具體實踐一下
參考:
《Structure and Interpretation of Computer Programs》
《ANSI Common Lisp》
MIT課程6.001
相關文章
- 求平方根 && 牛頓迭代法
- Python求一個數的平方根Python
- scheme 求平方根函式 sqrt 牛頓法實現Scheme函式
- 求平方根的兩種簡單演算法 (轉)演算法
- 【轉】Lisp 已死,Lisp 萬歲!Lisp
- Common lisp HyperSpec lisp 語法幫助Lisp
- 用JAVA計算平方根Java
- 關於lispLisp
- 99-lispLisp
- lisp入門Lisp
- lisp 閉包Lisp
- 585. 巢狀的平方根巢狀
- Lisp 整體思想Lisp
- Lisp 的本質Lisp
- Lisp的誕生Lisp
- Lisp天才神話Lisp
- lisp 習題 occurrencesLisp
- lisp 程式碼示例Lisp
- 99-lisp lisp 的99個問題 P11-20Lisp
- 99-lisp lisp 的99個問題 P1-10Lisp
- LeetCode 69[x的平方根]LeetCode
- 編寫一個函式求平方根,如果輸入的是負數,丟擲自定義型別的異常。如果輸出的是正數和零,則正常輸出其平方根...函式型別
- lisp 判斷時間Lisp
- 向偉大Lisp致敬Lisp
- Common LISP Hints 中文Lisp
- lisp 習題 post+Lisp
- Lisp語言簡介Lisp
- lisp 開發規範。Lisp
- Lisp Quote 和Backquote分析Lisp
- Lisp的永恆之道Lisp
- Lisp 永遠成不了程式設計主流語言 vs Lisp 神話之路Lisp程式設計
- Lisp經典演算法Lisp演算法
- lisp 變數的作用域Lisp變數
- lisp 中的 【,@】 與 【·】 以及【‘】 以及【 。,】Lisp
- 跨越邊界: Lisp 之美Lisp
- lisp 習題 our-unionLisp
- lisp 支援遠端debugLisp
- windows下搭建lisp環境WindowsLisp