Nombres à virgule flottante de haute précision dans Haskell?
Je sais que Haskell a des types de données natifs qui vous permettent d'avoir de très gros entiers, donc des choses comme
>> let x = 131242358045284502395482305
>> x
131242358045284502395482305
Travaillez comme prévu. Je me demandais s'il y avait une structure native similaire" grand flotteur de précision " que je pourrais utiliser, donc des choses comme
>> let x = 5.0000000000000000000000001
>> x
5.0000000000000000000000001
Pourrait être possible. Si j'entre ceci dans Haskell, il tronque à 5 si je vais au-delà de 15 décimales (double précision).
3 réponses
Selon exactement ce que vous cherchez:
-
Float
etDouble
- à peu près ce que vous savez et" l'amour " de flotteurs et Doubles dans toutes les autres langues. -
Rational
qui est unRatio
deInteger
s -
FixedPoint
- Ce paquet fournit des valeurs de points fixes de taille arbitraire. Par exemple, si vous voulez un nombre représenté par 64 bits intégraux et 64 bits fractionnaires, vous pouvez utiliserFixedPoint6464
. Si vous voulez un nombre qui est de 1024 bits intégraux et 8 bits fractionnaires puis utilisez$(mkFixedPoint 1024 8)
pour générer le typeFixedPoint1024_8
. - EDIT: et oui, je viens d'apprendre le paquet
numbers
mentionné ci-dessus-très cool.
Haskell n'a pas de nombres à virgule flottante de haute précision naitivement.
Pour un paquet / module / bibliothèque à cet effet, je me référerais à cette réponse à un autre post . Il y a aussi un exemple qui montre comment utiliser ce paquet, appelé numéros.
Si vous avez besoin de calculs à virgule flottante /rapide/ haute précision, vous devrez peut-être utiliser FFI et doubles longs, car le type Haskell natif n'est pas encore implémenté (voir https://ghc.haskell.org/trac/ghc/ticket/3353).