web-dev-qa-db-ja.com

Haskellの高精度浮動小数点数?

Haskellにはネイティブのデータ型があり、非常に大きな整数を使用できるので、

>> let x = 131242358045284502395482305
>> x
131242358045284502395482305

期待どおりに動作します。私が使用できる同様の「大精度フロート」ネイティブ構造があるかどうか疑問に思っていたので、

>> let x = 5.0000000000000000000000001
>> x
5.0000000000000000000000001

可能かもしれません。これをHaskellに入力すると、小数点以下15桁を超えると、5に切り捨てられます(倍精度)。

25
MYV

あなたが探しているものに正確に応じて:

  • FloatDouble-他のすべての言語のFloatsandDoublesからあなたが知っていて「愛している」ことのほとんど。
  • Rational これはRatiosのIntegerです
  • FixedPoint -このパッケージは、任意のサイズの固定小数点値を提供します。たとえば、64個の整数ビットと64個の小数ビットで表される数値が必要な場合は、_FixedPoint6464_を使用できます。 1024整数ビットと8小数ビットの数値が必要な場合は、$(mkFixedPoint 1024 8)を使用してタイプ_FixedPoint1024_8_を生成します。
  • 編集:はい、私は上記のnumbersパッケージについて学びました-とてもクールです。
20

Haskellは素朴に高精度の浮動小数点数を持っていません。

この目的のためのパッケージ/モジュール/ライブラリについては、 別の投稿へのこの回答 を参照します。このパッケージの使用方法を示す例もあります。これはnumbersと呼ばれます。

9
Mekeor Melire

高精度の/ fast /浮動小数点計算が必要な場合は、ネイティブのHaskell型がまだ実装されていないため、FFIとlong doubleを使用する必要があります( https://ghc.haskell.org/trac/を参照) ghc/ticket/335 )。

1
L29Ah