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
- 【轉】Lisp 已死,Lisp 萬歲!Lisp
- scheme 求平方根函式 sqrt 牛頓法實現Scheme函式
- Lisp 整體思想Lisp
- lisp 判斷時間Lisp
- Lisp 永遠成不了程式設計主流語言 vs Lisp 神話之路Lisp程式設計
- Lisp經典演算法Lisp演算法
- windows下搭建lisp環境WindowsLisp
- 69.x的平方根
- LeetCode 69[x的平方根]LeetCode
- Julia是Lisp的轉世 - ArnuldLisp
- LeetCode LCR072[x的平方根]LeetCode
- 編寫一個函式求平方根,如果輸入的是負數,丟擲自定義型別的異常。如果輸出的是正數和零,則正常輸出其平方根...函式型別
- 因 AI 而設計的語言 LISPAILisp
- VSCode for Mac 搭建 Common Lisp 開發環境VSCodeMacLisp開發環境
- 用java寫一個lisp 直譯器JavaLisp
- “Lisp太難學了”是謊言,Racket語言是中學生都可以接受的Lisp/Python - DustyCloud BrainstormsLispRacketPythonCloudAIORM
- 哈夫曼編碼 —— Lisp 與 Python 實現LispPython
- 在Grammarly的生產環境中執行LispLisp
- 二分搜尋小結-x的平方根
- LeetCode 之 JavaScript 解答第69題 —— X 的平方根(Squrt(x))LeetCodeJavaScript
- 用java寫lisp 直譯器 (10 實現物件和類)JavaLisp物件
- 讓我們一起啃演算法----x 的平方根演算法
- Common Lisp物件系統是現存最好的物件系統? - mendhekarLisp物件
- 力扣之x的平方根(雙指標解法思路分析最佳化)力扣指標
- SICP第四章閱讀心得 - Lisp直譯器的實現Lisp
- 轉發精品:求極限、求積分、求微分、求導數、求曲,求全微分、求複合求導
- 《崩壞:星穹鐵道》三測試玩:夢的平方根和工業化
- 從Lisp到Vue、React再到 Qwit:響應式程式設計的發展歷程LispVueReact程式設計
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- 請求OpenFeign的GET請求時,請求為何失敗?
- [求職]五年後端求職求職後端
- 求N!
- 求刪
- 求冪