Haskell?中的高精度浮点数

zf9nrax1  于 2022-11-14  发布在  其他
关注(0)|答案(4)|浏览(207)

我知道Haskell有原生数据类型,它允许您拥有非常大的整数,因此,

>> let x = 131242358045284502395482305
>> x
131242358045284502395482305

我想知道是否有一个类似的“大精度浮点”本机结构可以使用,所以像

>> let x = 5.0000000000000000000000001
>> x
5.0000000000000000000000001

可能是可能的。如果我在Haskell中输入这个,如果我超过15个小数位(双精度),它会截短到5。

68bkxrlz

68bkxrlz1#

具体取决于您的需求:

  • FloatDouble-几乎是你所知道的和“爱”从浮点数和双在所有其他语言。
  • Rational,它是Integer s的Ratio
  • FixedPoint-此套件提供任意大小的定点值。例如,如果您想要一个由64个整数比特和64个分数比特表示的数字,您可以使用FixedPoint6464。如果您想要一个由1024个整数比特和8个分数比特表示的数字,则使用$(mkFixedPoint 1024 8)来产生FixedPoint1024_8型别。
  • 编辑:而且是的,我刚刚了解了上面提到的numbers包-非常酷。
8nuwlpux

8nuwlpux2#

Haskell本身没有高精度浮点数。
对于这个用途的包/模块/库,我会参考另一篇文章的答案。还有一个例子展示了如何使用这个包,叫做 * numbers *。

nvbavucw

nvbavucw3#

如果你需要高精度/快速/浮点计算,你可能需要使用FFI和长双精度,因为原生的Haskell类型还没有实现(参见https://ghc.haskell.org/trac/ghc/ticket/3353)。

ujv3wf0j

ujv3wf0j4#

我认为任意精度浮点数的标准包现在是https://hackage.haskell.org/package/scientific

相关问题