haskell 中的 Heron 方法
Heron's method in haskell
我在 heron 方法的这段代码中遇到除以零的异常,我有点迷路了。
epsilon:: Integral a => a
epsilon = 1
heron:: Integral a => a -> a
heron r = help 0
where
help x
| abs (heron' x - heron' (x + 1)) < epsilon = heron' (x + 1)
| otherwise = help (x + 1)
heron' 0 = 1
heron' x = (1 `div` 2) * (heron' (x-1) + (r `div` heron' (x-1)))
我必须在这段代码中寻找解决此问题的任何建议吗?
(1 `div` 2)
肯定是个问题,但是我需要写什么呢?
如果您需要这种除法,您可能希望使用 (/)
而不是 div
和 Fractional
而不是 Integral
。所以:
epsilon:: Fractional a => a
epsilon = 1
heron:: (Fractional a, Ord a) => a -> a
heron r = help 0
where
help x
| abs (heron' x - heron' (x + 1)) < epsilon = heron' (x + 1)
| otherwise = help (x + 1)
heron' 0 = 1
heron' x = (1 / 2) * (heron' (x-1) + (r / heron' (x-1)))
我在 heron 方法的这段代码中遇到除以零的异常,我有点迷路了。
epsilon:: Integral a => a
epsilon = 1
heron:: Integral a => a -> a
heron r = help 0
where
help x
| abs (heron' x - heron' (x + 1)) < epsilon = heron' (x + 1)
| otherwise = help (x + 1)
heron' 0 = 1
heron' x = (1 `div` 2) * (heron' (x-1) + (r `div` heron' (x-1)))
我必须在这段代码中寻找解决此问题的任何建议吗?
(1 `div` 2)
肯定是个问题,但是我需要写什么呢?
如果您需要这种除法,您可能希望使用 (/)
而不是 div
和 Fractional
而不是 Integral
。所以:
epsilon:: Fractional a => a
epsilon = 1
heron:: (Fractional a, Ord a) => a -> a
heron r = help 0
where
help x
| abs (heron' x - heron' (x + 1)) < epsilon = heron' (x + 1)
| otherwise = help (x + 1)
heron' 0 = 1
heron' x = (1 / 2) * (heron' (x-1) + (r / heron' (x-1)))