2 つの Int 値を除算して Float 値を取得する正しい方法は何ですか? 質問する

2 つの Int 値を除算して Float 値を取得する正しい方法は何ですか? 質問する

IntHaskell で 2 つの値を割り算し、その結果を として取得したいと思いますFloat。次のようにしてみました:

foo :: Int -> Int -> Float
foo a b = fromRational $ a % b

しかし、GHC (バージョン 6.12.1) では、a式に関して「期待される型 'Integer' を推論された型 'Int' と一致させることができませんでした」と表示されます。

理由はわかります。呼び出しではを生成するfromRational必要があるため、オペランドはではなく型である必要があります。しかし、除算する値は範囲の制限にまったく近づいていないため、任意精度の bignum 型を使用するのはやり過ぎのようです。(%)Ratio IntegerIntegerIntInt

これを行う正しい方法は何ですか?toIntegerオペランドを呼び出すだけでよいのでしょうか、それとも(%)私が知らないもっと良い方法 (比率を含まない方法など) があるのでしょうか?

ベストアンサー1

オペランドを浮動小数点数に変換する必要がある初めその後、割り算をします。そうしないと、整数の割り算(小数点なし)が実行されます。

簡潔な解決策( が必要Data.Function

foo = (/) `on` fromIntegral

これは

foo a b = (fromIntegral a) / (fromIntegral b)

foo :: Int -> Int -> Float

おすすめ記事