如何在Integral类型中获得sqrt的楼层

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Integral类型中获得sqrt的楼层相关的知识,希望对你有一定的参考价值。

我在Haskell中编写了简单的函数,我想检查数字是否为素数且具有较小的优化。我不知道如何写正确的roundSqrt

roundSqrt :: Integral -> Integral
roundSqrt x = floor (sqrt (fromIntegral x))  


isPrime :: Integral t => t -> Bool
isPrime n = [i | i <- [2..k], n `mod` i == 0] == []
           where k =  roundSqrt(n)
答案

Integral是类型类,因此它不应该用作类型。您甚至在isPrime类型注释中正确使用它。所以,为了使它工作,你应该写

roundSqrt :: Integral t => t -> t

以上是关于如何在Integral类型中获得sqrt的楼层的主要内容,如果未能解决你的问题,请参考以下文章

当类型不是 Integral 时,如何使用 std::atomic 执行基本操作?

04-Integral类型数据

派生类型及其依赖项

C中int类型的sqrt()

如何启用 MapKit 楼层?

左值和右值上的 C++ std::is_integral 显示不同的结果