round
Haskellの関数の公式仕様はありますか?GHCiバージョン7.0.3では、次の動作が見られます。
ghci> round (0.5 :: Double)
0
ghci> round (1.5 :: Double)
2
0.5と1.5はどちらも浮動小数点数として正確に表現できるため、Pythonと同じ動作が見られると期待していました。
>>> round(0.5)
1.0
>>> round(1.5)
2.0
違いの理由はありますか、それともGHCiの癖ですか?
round
Haskellの関数の公式仕様はありますか?GHCiバージョン7.0.3では、次の動作が見られます。
ghci> round (0.5 :: Double)
0
ghci> round (1.5 :: Double)
2
0.5と1.5はどちらも浮動小数点数として正確に表現できるため、Pythonと同じ動作が見られると期待していました。
>>> round(0.5)
1.0
>>> round(1.5)
2.0
違いの理由はありますか、それともGHCiの癖ですか?
仕様にあります。Haskellレポートのセクション6.4.6でそれを見ることができます:
round x
に最も近い整数を返します。2つの整数の間で等距離にx
ある場合は偶数の整数を返します。x
@dflemstrで指摘されているように、これは浮動小数点演算のIEEE標準に準拠しています。