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).

23
demandé sur hammar 2013-06-02 03:23:13

3 réponses

Selon exactement ce que vous cherchez:

  • Float et Double - à peu près ce que vous savez et" l'amour " de flotteurs et Doubles dans toutes les autres langues.
  • Rational qui est un Ratio de Integers
  • 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 utiliser FixedPoint6464. 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 type FixedPoint1024_8.
  • EDIT: et oui, je viens d'apprendre le paquet numbers mentionné ci-dessus-très cool.
20
répondu Thomas M. DuBuisson 2013-06-02 00:54:16

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.

9
répondu Mekeor Melire 2017-05-23 12:25:40

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).

1
répondu L29Ah 2015-12-13 14:27:15