Haskell中的高精度浮点数?

时间:2013-06-01 23:23:14

标签: haskell precision

我知道Haskell有本机数据类型,允许你有很大的整数,比如

>> let x = 131242358045284502395482305
>> x
131242358045284502395482305

按预期工作。我想知道是否有一个类似的“大精度浮动”原生结构我可以使用,所以像

>> let x = 5.0000000000000000000000001
>> x
5.0000000000000000000000001

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

3 个答案:

答案 0 :(得分:20)

具体取决于您所寻找的内容:

  • FloatDouble - 几乎所有其他语言的Floats and Doubles都知道并“爱”。
  • Rational这是Ratio
  • Integer
  • FixedPoint - 此程序包提供任意大小的固定点值。例如,如果您想要一个由64位整数位和64位小数位表示的数字,则可以使用FixedPoint6464。如果您想要一个1024个整数位和8个小数位的数字,那么使用$(mkFixedPoint 1024 8)生成类型FixedPoint1024_8
  • 编辑:是的,我刚刚了解了上面提到的numbers包 - 非常酷。

答案 1 :(得分:9)

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

对于用于此目的的包/模块/库,我将引用this answer to another post。还有一个示例显示了如何使用此包,称为 numbers

答案 2 :(得分:1)

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