Int
Haskell で 2 つの値を割り算し、その結果を として取得したいと思いますFloat
。次のようにしてみました:
foo :: Int -> Int -> Float
foo a b = fromRational $ a % b
しかし、GHC (バージョン 6.12.1) では、a
式に関して「期待される型 'Integer' を推論された型 'Int' と一致させることができませんでした」と表示されます。
理由はわかります。呼び出しではを生成するfromRational
必要があるため、オペランドはではなく型である必要があります。しかし、除算する値は範囲の制限にまったく近づいていないため、任意精度の bignum 型を使用するのはやり過ぎのようです。(%)
Ratio Integer
Integer
Int
Int
これを行う正しい方法は何ですか?toInteger
オペランドを呼び出すだけでよいのでしょうか、それとも(%)
私が知らないもっと良い方法 (比率を含まない方法など) があるのでしょうか?
ベストアンサー1
オペランドを浮動小数点数に変換する必要がある初めその後、割り算をします。そうしないと、整数の割り算(小数点なし)が実行されます。
簡潔な解決策( が必要Data.Function
)
foo = (/) `on` fromIntegral
これは
foo a b = (fromIntegral a) / (fromIntegral b)
と
foo :: Int -> Int -> Float