在 Haskell 中联合使用 floor 和 sqrt
Joint use of floor and sqrt in Haskell
我希望我的函数读取一个整数,return 平方根向下舍入到最接近的整数。这是我试过的:
roundSqrt :: Int -> Int
roundSqrt x = floor (sqrt x)
我得到的错误是 "Could not deduce (Floating a) arising from a use of -sqrt'",但我不明白这是什么意思。
sqrt 的类型是:
λ> :t sqrt
sqrt :: Floating a => a -> a
楼层类型是:
λ> ::t floor
floor :: (RealFrac a, Integral b) => a -> b
因此,sqrt
需要一个具有 Floating
约束的类型。您可以使用 fromIntegral
函数来实现:
roundSqrt :: Int -> Int
roundSqrt x = floor (sqrt (fromIntegral x))
我希望我的函数读取一个整数,return 平方根向下舍入到最接近的整数。这是我试过的:
roundSqrt :: Int -> Int
roundSqrt x = floor (sqrt x)
我得到的错误是 "Could not deduce (Floating a) arising from a use of -sqrt'",但我不明白这是什么意思。
sqrt 的类型是:
λ> :t sqrt
sqrt :: Floating a => a -> a
楼层类型是:
λ> ::t floor
floor :: (RealFrac a, Integral b) => a -> b
因此,sqrt
需要一个具有 Floating
约束的类型。您可以使用 fromIntegral
函数来实现:
roundSqrt :: Int -> Int
roundSqrt x = floor (sqrt (fromIntegral x))