2009-06-14 10 views
5

Estoy escribiendo una función en Haskell que trata con números más allá de la longitud de un int de 32 bits. No puedo encontrar el tipo para hacer esto y parece que estoy buscando los términos incorrectos.Haskell tipo numérico de 64 bits

Tiene que ser capaz de mantener los números con la longitud de aproximadamente 2^40 sin ninguna pérdida de precisión

Ejemplo:

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

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

irónicamente, si no hubieras puesto la firma para addTwo in, hubiera funcionado, porque se hubiera inferido que addTwo era polimórfico (es decir, Num a => a -> a -> a), y luego para los números, habría predeterminado al tipo más general, que es Integer – newacct

+5

Pero no habría aprendido nada, que es el punto – Yacoby

Respuesta

21

Para una precisión ilimitada, use el tipo Entero. Para 64 bits de precisión, en todas las plataformas, use Data.Int.Int64. Ambos serán fáciles de encontrar con Hoogle: http://haskell.org/hoogle/

7

Usted desea que el tipo de datos Integer en lugar de Int:

addTwo :: Integer -> Integer -> Integer 
0

Use Integer, que es de precisión ilimitada, en lugar de Int.

Cuestiones relacionadas