2009-06-14 20 views
5

ハスケルでは、32ビット整数の長さを超える数を扱う関数を書いています。私はこれを行うための型を見つけることができませんし、間違った言葉を探しているようです。ハスケル64ビット数値型

それは精度を損なうことなく、約2^40の長さで数を保持できるようにする必要があり

例:あなたが代わりにIntIntegerデータ型をしたい

addTwo :: Int -> Int -> Int 
addTwo a b = a + b 

main :: IO() 
main = do 
    putStrLn (show (addTwo 700851475143 1)) 
+4

皮肉なことに、addTwoが多型であると推測されているので、addTwoのシグネチャを入れていないと、うまくいきます(Num a => a - > a - > a)、数値の場合は、最も一般的な型の整数になります。整数 – newacct

+5

しかし、私は何も学んでいないでしょう。 – Yacoby

答えて

21

無制限の精度の場合は、Integer型を使用します。プラットフォーム間で64ビットの精度が必要な場合は、Data.Int.Int64を使用します。両方ともHoogleで簡単に見つけることができます:http://haskell.org/hoogle/

7

addTwo :: Integer -> Integer -> Integer 
0

Intではなく、無制限の精度であるIntegerを使用してください。