2017-03-10 53 views
0

想知道是否有方法来计算Haskell中的一个浮点的第n个根。我可以尝试写一个算法,但在我做之前,想知道是否有模块或罐头函数,我没有找到。我找到了这个网页: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,但被告知无法找到该模块。我可能会误解如何加载这样的模块。

+0

'nroot n x = x **(1/n)'。或者,如果您愿意:'nroot = flip(**)。 recip'。 – Alec

+0

你总是可以使用指数倒数 - 作为'sqrt x = x ^(1/2)' – epsilonhalbe

+0

该死的你打我@Alec - 写这个答案? – epsilonhalbe

回答

2

请注意,n th根的定义实际上只是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肯定你想要的东西。特别要注意的是你所使用的根必须是一个编译时类型级别的数字。