Haskell:找到浮点的第n个根

Haskell:找到浮点的第n个根,haskell,Haskell,想知道是否有办法计算Haskell中浮点的第n个根。我可以试着写一个算法,但在写之前,我想知道是否有一个模块或封装函数我找不到。我找到了这个页面: 它提到了一个nroot函数,但不知道如何访问它。它不在标准库中(当我尝试运行nroot(3,27)时,它告诉我函数不在范围内)。我试图通过输入导入Numeric.Units.Dimensional来导入Numeric.Units.Dimensional,但被告知找不到模块。我可能误解了如何加载这样的模块。请注意,nth根的定义实际上只是按n的倒数求

想知道是否有办法计算Haskell中浮点的第n个根。我可以试着写一个算法,但在写之前,我想知道是否有一个模块或封装函数我找不到。我找到了这个页面:


它提到了一个
nroot
函数,但不知道如何访问它。它不在标准库中(当我尝试运行
nroot(3,27)
时,它告诉我函数不在范围内)。我试图通过输入
导入Numeric.Units.Dimensional
来导入Numeric.Units.Dimensional,但被告知找不到模块。我可能误解了如何加载这样的模块。

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

nroot :: (Integral a, Floating b) => a -> b -> b 
n `nroot` x = x ** (1 / fromIntegral n)
这就是说,当心危险!只有
**
适合您



我可能应该补充一点,即
nroot::(knowntypoint n,Floating a)=>Proxy n->Quantity da->Quantity(Root dn)a
肯定不是您想要的。特别要注意的是,您所取的根必须是编译时类型的级别号。

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

nroot :: (Integral a, Floating b) => a -> b -> b 
n `nroot` x = x ** (1 / fromIntegral n)
这就是说,当心危险!只有
**
适合您



我可能应该补充一点,即
nroot::(knowntypoint n,Floating a)=>Proxy n->Quantity da->Quantity(Root dn)a
肯定不是您想要的。请特别注意,您使用的根必须是编译时类型级别号。

nroot nx=x**(1/n)
。或者,如果您愿意:
nroot=flip(**)。倒数
。你总是可以使用倒数的幂运算-如
sqrt x=x^(1/2)
该死的你打败了我@Alec-写下这个作为答案?@epsilonhalbe小心三个不同的幂运算算子
**
^
^
!!啊,你是对的——我是从数学的角度思考的,而不是“haskell”
nroot nx=x**(1/n)
。或者,如果您愿意:
nroot=flip(**)。倒数
。你总是可以使用倒数的幂运算-如
sqrt x=x^(1/2)
该死的你打败了我@Alec-写下这个作为答案?@epsilonhalbe小心三个不同的幂运算算子
**
^
^
!!啊,你是对的-我是从数学的角度思考的,而不是“haskell”“注意,
n
th根的定义实际上只是
n
的倒数的幂运算。”。虽然这是可能的,但可以说这不是一个很好的定义。特别是,它首先要求您定义一个有理数的幂运算。。。但是没有直接的方法可以做到这一点(不引用根),您需要首先使用指数/对数三明治为实指数定义它。不,从数学上来说,定义ⁿ√y为y=x的解ⁿ (由于连续性和单调性,它的存在是独一无二的)。“请注意,
n
th根的定义实际上只是
n
倒数的幂运算。”。虽然这是可能的,但可以说这不是一个很好的定义。特别是,它首先要求您定义一个有理数的幂运算。。。但是没有直接的方法可以做到这一点(不引用根),您需要首先使用指数/对数三明治为实指数定义它。不,从数学上来说,定义ⁿ√y为y=x的解ⁿ (由于连续性和单调性,它的存在是独一无二的)。