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) 肯定有问题,但我需要写什么?

回答

如果您需要这种除法,您可能想要使用(/)代替divFractional代替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)))


以上是Haskell中的Heron方法的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>