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

Floating point 哪些编程语言具有任意精度浮点文字?,floating-point,programming-languages,literals,arbitrary-precision,Floating Point,Programming Languages,Literals,Arbitrary Precision,这个问题要求编程语言接受数值常量,以分配给任意精度变量或用于任意精度表达式,而不在表达式中分配或应用之前执行IEEE浮点表示的转换。例如,以下伪语言赋值表达式: BigNum x = 0.1; 许多语言提供或可以访问库,这些库支持从文本字符串构造此类BigNumtype对象。我正在寻找一种编程语言,它可以将像0.1这样的数字标记直接转换成BigNum,而不需要程序员创建一个字符串,然后必须对该字符串进行解析,并可能在运行时引发异常或标记错误。相反,我感兴趣的语言是,在将数字文字处理为任意精度的

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

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

从网站上看,它看起来像,并为任意精度浮点数提供文字语法。其他更广泛使用的语言是否提供了与我上面提供的伪示例相同或类似的东西

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

x = 1//10
现在
1//10
0.1
在数学上是相同的数字——以10为基数。然而,大多数编程语言将源代码中的文字十进制数转换为IEEE浮点数。通常这正是人们想要的。然而,许多不熟悉IEEE浮点数表示法的人——或是已经基本淡出历史的类似浮点数表示法的人——惊讶地发现,当将十分之一转换成二进制分数时,它并不完全是十分之一。此外,当浮点“错误”累积得相当平均/抵消时,“大部分时间”正常工作的代码产生令人惊讶的结果后,通常会出现这种意外情况。当然,这就是浮点表示和算术运算的本质,它们在实践中同样非常有用。买主须知:

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

到目前为止,Julia是有理数的一个很好的答案,但远远不是唯一支持有理数文本的语言。但是,它没有任意精度的文字。因此,J、Maple和Maxima似乎拥有我所追求的东西。也许这几乎就是完整的清单。尽管如此,如果有人知道另外一两位候选人,我还是希望有人能指点一下

到目前为止的答案…

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

…请注意,看起来像浮点文字的实际上是一个有理数;Haskell最初设计中的一个非常聪明的决定

对于许多程序员来说,Julia将更加平易近人,同时为各种数学类型和运算以及通常的优异性能提供出色的支持。然而,它也有非常强大的语法,许多本机编译的软件包与Julia现在可用的软件包相匹配或超过,而且毫无疑问,在商业、开源和学术项目中,它的采用率和应用率都要高得多——不过,如果我有选择的话,我个人更喜欢Julia


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

在Smalltalk中,Visualworks扩展了st-80语法,以引入1.23s,它是FixedPoint的一个实例(不是一个好名字…),内部表示为有理分数123/100

数字的行为与分数的行为完全相同,分数可以有任意长的分子和分母,并执行精确的算术运算,只是它有一些特定的打印规则:在小数点分隔符之后四舍五入为固定的小数位数。1.23s4四舍五入到4位小数->1.2300“1.23s四舍五入到提供的分数位数,因此为2


在Visualworks之后,大多数Smalltalk方言添加了一些等效类和相同的文字语法。在Squeak中,类名为ScaledDecimal,但编译器中只实现了1.23s2语法。Pharo还将在3.0版中包含1.23s。

Haskell有由任意精度整数支持的有理数,并且它已经过载