哪些编程语言具有任意精度浮点文字?

Ned*_*Ned 5 floating-point programming-languages literals arbitrary-precision

此问题要求编程语言接受数字常量以分配给任意精度变量或用于任意精度表达式,而无需在表达式中赋值或应用之前执行转换为 IEEE 浮点表示。例如,以下伪语言赋值表达式:

BigNum x = 0.1;
Run Code Online (Sandbox Code Playgroud)

许多语言提供或可以访问库,这些库将允许BigNum从文本字符串构建此类类型对象。我正在寻找可以将数字标记0.1直接转换为 a 的编程语言,BigNum而不需要程序员创建一个字符串,然后必须对其进行解析并可能在运行时抛出异常或标记错误。相反,我对编译器或标记器可以在将数字文字处理为任意精度的十进制或整数比率表示之前报告格式错误的数字或无效表达式的语法错误的语言感兴趣。

Rosetta Code网站上的Literals/Floating point看来,JMapleMaxima为任意精度浮点数提供了文字语法。是否有其他更广泛使用的语言提供与我上面提供的伪示例相同或类似的东西?

作为一个具体的例子,Julia提供了对有理数的内置支持。这些数字具有可在源代码中使用的字面表示。例如:

x = 1//10
Run Code Online (Sandbox Code Playgroud)

现在1//100.1在数学上是相同的数字——以 10 为基数。但是,大多数编程语言会将源代码中的文字十进制数转换为 IEEE 浮点数。通常这正是我们想要的。然而,不少不熟悉数字的 IEEE 浮点表示(或已基本淡入历史的类似浮点表示)的人惊讶地发现,十分之一并不完全是十分之一。转换为二进制分数。此外,这种意外通常发生在“大部分时间”工作的代码在浮点“错误”累积而平均/抵消时产生令人惊讶的结果之后。当然,这是浮点表示和算术运算的本质,它们在实践中同样非常有用。每个计算机科学家都应该了解的关于浮点运算的知识

尽管如此,我发现有时整数不够用,浮点数会在其他精确计算中引入不必要的问题。为此,有理数和任意精度库符合要求。伟大的。但是,我仍然想知道是否有任何语言支持在语言本身中直接表示有理和任意精度文字。毕竟,我不想使用只有字符串文字的语言,然后必须在运行时将其解析为数字。

到目前为止,Julia 是有理数的一个很好的答案,但远不是唯一支持有理数文字的语言。但是,它没有任意精度文字。为此,J、Maple 和 Maxima 似乎拥有我正在寻找的东西。也许这几乎是完整的清单。尽管如此,如果有人知道另一或两个候选人,我将不胜感激...

到目前为止的答案...

迄今为止最好的答案是Haskell。它提供了对数字类型和运算以及数字文字符号的丰富理解,其中包括有理数表达式,并且似乎在所有情况下都将带有小数部分的十进制数视为有理数而不是浮点文字。至少,这是我从快速阅读 Haskell 文档和我遇到的一篇博客文章中收集到的,重载 Haskell 数字,第 3 部分,固定精度,其中作者指出:

...请注意,看起来像浮点数的文字实际上是有理数;原始 Haskell 设计中非常聪明的决定之一。

对于许多程序员来说,Julia 会更加平易近人,同时提供对各种数学类型和运算的出色支持以及通常出色的性能。然而,Python也有非常强大的语法,许多本机编译的包与当今 Julia 可用的包相匹配或超过,而且毫无疑问,在商业、开源和学术项目中享有更多的采用和应用——仍然,我的如果我有选择,个人偏好是朱莉娅。

就我自己而言,我将花更多时间研究 Haskell 并重新审视Ocaml / F#,这可能是 Julia/Python 之类的语言和 Haskell 之类的语言之间可行的中间选择——这些编程语言如何跨越某种范围被留下作为一个供读者练习。如果 Ocaml/F# 在我感兴趣的情况下提供与 Haskell 相当的表达能力,那么仅基于当前和未来可能的采用率,它们可能是更好的选择。但就目前而言,Haskell 似乎是我最初问题的最佳答案。

Ing*_*ngo 3

Haskell 具有由任意精度整数支持的有理数,并且它具有重载的数字文字,因此大多数情况下您的文字具有您想要的类型。