1 个不稳定版本
新 0.1.0 | 2024年8月21日 |
---|
#294 in 数学
80 每月下载量
91KB
2.5K SLoC
Realistic
Realistic 是 Hans Boehm 的 "向实数的API迈进" 论文的实现。
这里的核心理念是,虽然从定义上看,几乎所有实数都是不可计算的,因此我们无法期望它们在计算机中有良好的行为,但如果提供更好的API,许多有用的实数表现相当良好。
这个crate中的Real类型代表一个由有理数(两个可能很大的整数之间的比例)和一些我们可能无法精确计算的实值组成,这些实值在显示时必须进行近似,但在某些情况下有时有精确的描述,我们可以跟踪并在进一步的计算中利用这些描述。
内置的交互式示例评估手动输入的 简单表达式 并显示答案。
未完成
这个库是不完整的,有些在论文中描述的Java API中完整且有用的功能在这里是不完整的或部分完成的。
特别是,Hans 的工作中提供的三角函数尚未实现,有 Pi 但没有正弦等。
不忠实
在某种程度上,这个实现反映了原始论文的意图,应该归功于该论文的作者,Hans Boehm。
另一方面,如果您在这个代码中遇到错误或不充分之处,很可能完全归咎于我作为其程序员。
在某些地方,用 Rust 表达 API 的自然方式与 Java 不同,我打算在下面解释这种差异,但到目前为止,工作的性质通常使得这样做不切实际。
与 Java 不同,Rust 有 "运算符重载",或者说,我们可以为用户定义的类型实现许多算术运算符。这意味着在 Java API 提供命名函数的地方,Rust API 在许多情况下提供了运算符,例如 + (impl Add) 和 * (impl Multiply)。
我选择不为此提供此功能,这可能在以后重新考虑。
BoundedRational::to_big_integer
有一个不同的名称,因为在 Rust 中 as
表示这种转换成本很低。
性能
尚未尝试测量此Rust当前性能,与Java相比,或与类似代码相比。尽管代码不是专门为了性能编写的,但仍采取了一些措施,以避免不必要的重新计算,甚至超出了可计算类型的核心思想。
简单表达式
提供了对简单、相对容易阅读的表达式语法的解析,这种语法具有类似LISP的结构,每个列表恰好包含一个运算符,然后是一个或多个子表达式,这些子表达式可以是另一个列表、数值文字或名称。这种类型解析表达式的类型被称为Simple。
我们可以以通常的方式解析这些表达式,并可以评估这种表达式。
目前提供的运算符包括编程中期望的加法、减法、乘法和除法的+、-、*和/,以及e表示自然指数,l表示自然对数,s或√表示平方根
(l (e 1)) == (e (l 1)) == 1
(s 9) == 3
数值文字以十进制形式书写,2.75正好是两又四分之一。
今天内置的名称只有e(数学常数,自然对数的底数)和pi(数学常数π)
(+ 1 2 3 4) == 10
(* 1 2 3 4) == 24
(- 1) == -1 取反数字
(- 1 2) == -1 基本减法
(= 1 2 3) == -4 所有后续参数也将被减去
(/ 1) == 1 取反数字
(/ 1 2) == 0.5 基本除法
(/ 1 2 3) == 六分之一,所有后续参数也将被除
依赖项
~745KB
~16K SLoC