yul*_*ian 1 geometry haskell sqrt
关于SO的另一个问题,标题相同。我在这里已经阅读了已经回答的问题,但仍然不明白如何解决这些问题
No instance for (Fractional Int) arising from a use of ‘/’
In the expression: (a + b + c) / 2
-- and
No instance for (Floating Int) arising from a use of ‘sqrt’
In the first argument of ‘(>)’, namely
Run Code Online (Sandbox Code Playgroud)
在这个简单的函数中,该函数用于通过3个边找到三角形的面积。
----- Heron's formula -----
-- S = sqrt(p*(p-a)*(p-b)*(p-c)), where p = (a+b+c)/2
isTriangle :: Int -> Int -> Int -> Bool
isTriangle a b c = let p = (a + b + c) / 2
in if (sqrt(p * (p - a) * (p - b) * (p - c)) > 0)
then True
else False
Run Code Online (Sandbox Code Playgroud)
任何帮助和对这里出什么问题的解释表示赞赏。
更新: 以三角形不等式的方式,我已经解决了(似乎是这样)的解决方案。但是“ No instance for”的问题对我来说仍然没有解决。我确实想弄清楚。
-- works fine
import Data.List (sort)
isTriangle :: Int -> Int -> Int -> Bool
isTriangle a b c = let sides = sort[a, b, c]
in if ((last sides) < head sides + (head $ tail sides))
then True
else False
Run Code Online (Sandbox Code Playgroud)
该sqrt函数类型
sqrt :: Floating a => a -> a
Run Code Online (Sandbox Code Playgroud)
(它实际上是一个方法Floating类),所以它适用于任何标准的基于点浮动数值表示,包括Double,Complex Double和其它,不太重要的,种类。它也可能适用于非标准,非浮点,非常漂亮的数字表示形式。但是Int不支持平方根,因为只有完全平方才具有整数平方根。您可能应该切换到提供它们的类型。如果您需要从Int值开始,则可以使用
fromIntegral :: (Integral i, Num n) => i -> n
Run Code Online (Sandbox Code Playgroud)
对于您的特定目的(弄清楚是否有三角形),实际上不需要计算平方根。你知道为什么吗?
| 归档时间: |
|
| 查看次数: |
736 次 |
| 最近记录: |