我知道Haskell有本机数据类型,允许你有很大的整数,比如
>> let x = 131242358045284502395482305
>> x
131242358045284502395482305
按预期工作。我想知道是否有一个类似的“大精度浮动”原生结构我可以使用,所以像
>> let x = 5.0000000000000000000000001
>> x
5.0000000000000000000000001
是可能的。如果我在Haskell中输入它,如果我超过15位小数(双精度),它会截断为5。
答案 0 :(得分:20)
具体取决于您所寻找的内容:
Float
和Double
- 几乎所有其他语言的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)。