牛顿平方根

求出y和x/y的平均值,然后再进行计算,直到计算的值与目标的差值的绝对值小于预先给定的值,该近似值即为所求

(defn avg [& args]
  (/ (apply + args) (count args)))

(defn improve [guess x]
  (avg guess (/ x guess)))

(defn good-enough? [guess x]
  (< (Math/abs (- (* guess guess) x)) 0.001))

(defn sqrt-iter [guess x]
  (if (good-enough? guess x)
    guess
    (sqrt-iter (improve guess x) x)))

(defn new-if [p x y]
  (cond
    p x
    :default y))

(defn sqrt [x]
  (sqrt-iter 1.0 x))

(defn new-if [p x y]
  (cond
    p x
    :default y))

(defn new-sqrt-iter [guess x]
  (new-if (good-enough? guess x)
    guess
    (sqrt-iter (improve guess x) x)))

(defn new-sqrt [x]
  (new-sqrt-iter 1.0 x))

实验

user=> 
(sqrt 9)
3.00009155413138
user=> 
(sqrt (+ 100 37))
11.704699917758145
user=> 
(new-sqrt 9)
3.00009155413138
user=> 
(new-sqrt 137)
11.704699917758145
user=> 
user=> 
(Math/sqrt 9)
3.0
user=> 
(Math/sqrt 137)
11.704699910719626

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangningboo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值