如何使用Haskell计算负整数的平方根?
如何用Haskell计算负整数的平方根?
Haskell标准库的sqrt函数只支持非负实数,要计算负整数的平方根,得用复数类型来处理虚数结果,下面是具体方法:
方法1:使用Data.Complex模块处理复数
首先导入复数模块,然后利用复数版的sqrt函数直接计算:
import Data.Complex -- 定义函数计算负整数的平方根 sqrtNegativeInt :: Int -> Complex Double sqrtNegativeInt n = sqrt (fromIntegral n :+ 0)
示例用法
在GHCi里测试:
> sqrtNegativeInt (-4) 0.0 :+ 2.0 > sqrtNegativeInt (-25) 0.0 :+ 5.0
这里:+是Haskell复数的构造器,格式为实部 :+ 虚部,结果0.0 :+ 2.0就对应数学里的2i。
方法2:手动构造虚数结果
如果你不想依赖复数的sqrt实现,也可以直接计算虚部:
sqrtNegativeInt' :: Int -> Complex Double sqrtNegativeInt' n = 0 :+ sqrt (fromIntegral (abs n))
这个逻辑更直观:负整数n的平方根是0 + i*√|n|,直接构造对应的复数即可。
额外说明
如果你不需要完整的复数类型支持,也可以返回一个元组来表示虚数结果,比如:
sqrtNegativeIntTuple :: Int -> (Double, Double) sqrtNegativeIntTuple n = (0.0, sqrt (fromIntegral (abs n)))
但复数类型的优势在于它支持后续的复数运算(比如加减乘除),更适合需要处理复杂复数操作的场景。
内容的提问来源于stack exchange,提问作者bhadra
相关产品推荐
相关产品推荐

