Math 非整数的任意精度

Math 非整数的任意精度,math,haskell,Math,Haskell,Haskell有一个内置的Integer类型,可以处理任意精度的整数。还有Rational,它是一个任意精度分数。但对这些事情的算术运算需要找到一个共同的分母,然后将结果消去到最小项 如果我想在尾数中使用(比如)100位精度进行浮点运算,该怎么办?我该怎么做 我看到有一个Data.Fixed模块,但它似乎提供了一些具有固定精度的自定义编写类型。我想要的是在运行时根据每个任务所需的精度动态地增加或减少精度 顺便说一句,我不是在寻找十进制算术,尽管我想知道它是否在某处可用会很有趣…怎么样?在这个Bi

Haskell有一个内置的
Integer
类型,可以处理任意精度的整数。还有
Rational
,它是一个任意精度分数。但对这些事情的算术运算需要找到一个共同的分母,然后将结果消去到最小项

如果我想在尾数中使用(比如)100位精度进行浮点运算,该怎么办?我该怎么做

我看到有一个
Data.Fixed
模块,但它似乎提供了一些具有固定精度的自定义编写类型。我想要的是在运行时根据每个任务所需的精度动态地增加或减少精度


顺便说一句,我不是在寻找十进制算术,尽管我想知道它是否在某处可用会很有趣…

怎么样?在这个BigFloat数据类型中,您可以自己选择精度。我知道它是十进制的,但也许你可以很容易地将它改成二进制的,从软件包中试试
Data.Number.CReal
。它提供了转换为字符串时要求的精度。

这是编译时,但是。。。也许是存在主义的一个很好的用例。对于这个问题,问题更大,尽管名称不同,但它根本不是浮点类型;我对调整算术精度以进行性能/精度权衡感兴趣。嗯,
CReal
的性能不是很好。但它会根据需要动态调整精度。大概你最后是在用你的数字做些什么。曼德布罗特生成器。所以我所做的就是计算满足某个不等式所需的迭代次数。我不认为
CReal
适合你。它不是很有效,而且比较对于实数只能是半可判定的。如果使用CReal,只需将“abs z`compare`threshold”替换为“abs(imagPart z*realPart z)`compare`(threshold*threshold)”,就可以避免不可判定性您可以使用Rational并不时地使用它来控制它。Rational数字应该在一个自包含的库中做您需要的一切,永远不会失去精度。以人类可读的格式(即十进制扩展)读取/写入有理数是否有问题?