27

我知道 Haskell 有本机数据类型,可以让你拥有非常大的整数,比如

>> let x = 131242358045284502395482305
>> x
131242358045284502395482305

按预期工作。我想知道是否可以使用类似的“大精度浮点”本机结构,所以像

>> let x = 5.0000000000000000000000001
>> x
5.0000000000000000000000001

有可能。如果我在 Haskell 中输入它,如果我超过 15 位小数(双精度),它会截断为 5。

4

3 回答 3

20

取决于您正在寻找什么:

  • FloatDouble- 几乎所有其他语言的 Floats 和 Doubles 中您所知道和“喜爱”的内容。
  • Rational这是Ratio一个Integer
  • FixedPoint- 这个包提供任意大小的定点值。例如,如果您想要一个由 64 个整数位和 64 个小数位表示的数字,您可以使用FixedPoint6464. 如果您想要一个 1024 个整数位和 8 个小数位的数字,则使用$(mkFixedPoint 1024 8)来生成 type FixedPoint1024_8
  • 编辑:是的,我刚刚了解了numbers上面提到的包 - 非常酷。
于 2013-06-02T00:54:16.930 回答
9

Haskell 没有原生的高精度浮点数。

对于为此目的的包/模块/库,我会将此答案参考另一篇文章。还有一个例子展示了如何使用这个包,叫做numbers

于 2013-06-02T00:12:14.547 回答
1

如果您需要高精度 /fast/ 浮点计算,您可能需要使用 FFI 和 long doubles,因为尚未实现本机 Haskell 类型(请参阅https://ghc.haskell.org/trac/ghc/ticket/ 3353 )。

于 2015-12-13T14:27:15.890 回答