Haskell:找到一个浮点数的第n个根

时间:2017-03-10 00:40:59

标签: haskell

想知道是否有办法在Haskell中计算浮点数的第n个根。我可以尝试编写一个算法,但在此之前,我想知道我是否有一个我找不到的模块或罐头功能。我找到了这个页面:

https://hackage.haskell.org/package/dimensional-1.0.1.0/docs/Numeric-Units-Dimensional.html

提及nroot功能,但无法告诉如何访问它。它没有进入标准库(当我尝试运行nroot(3,27)时,它告诉我函数不在范围内)。我尝试通过输入import Numeric.Units.Dimensional导入Numeric.Units.Dimensional,但被告知无法找到该模块。我可能误解了如何加载像这样的模块。

1 个答案:

答案 0 :(得分:3)

请注意,n根的定义实际上只是n的倒数的取幂。考虑到这一点,您可能最好写作27 ** (1 / 3)27 ** (recip 3)。如果你真的想要:

nroot :: (Integral a, Floating b) => a -> b -> b 
n `nroot` x = n `nroot` x = x ** (1 / fromIntegral n)

那就是说,谨防three exponentiation operators that exist!只有**适合您。

我应该补充一点,nroot :: (KnownTypeInt n, Floating a) => Proxy n -> Quantity d a -> Quantity (Root d n) a肯定是而不是你想要的东西。请特别注意,您所使用的根必须是编译时类型级别编号。