3 个不稳定版本

使用旧 Rust 2015

0.2.1 2016年12月5日
0.2.0 2016年12月5日
0.1.1 2016年12月3日
0.1.0 2016年12月3日

数学 中排名第 810

MIT 许可证

135KB
1.5K SLoC

xxcalc-rs 构建状态 覆盖率状态 Rust Crate

使用 Rust 编写的可嵌入或独立使用的健壮浮点多项式计算器。

该项目是一个 Rust crate(库),它提供了一个易于使用的 API 来提供浮点数计算器。此外,基本的计算单位是多项式,因此可以使用 x 符号执行多个算术运算。

您可以将此库用于自己的项目,作为数学评估器或使用 xxcalc 二进制文件作为独立的、命令行计算器。内部使用手动编写的标记化和迪杰斯特拉算法的逆波兰表示法(后缀表示法)转换中缀形式,然后进行评估。请参阅完整文档以获取实现细节。

二进制文件

xxcalc 可以用来替代常见的 bc Unix 工具。它内置了对加法、减法、乘法、除法和指数运算的支持。

以下是一个使用计算器的示例会话

>>> (3+(4-1))*5
30
>>> 2 * x + 0.5 = 1
0.25
>>> 2x + 1 = 2(1-x)
0.25
>>> (x^3+2x-1)^3
x^9+6x^7-3x^6+12x^5-12x^4+11x^3-12x^2+6x-1
>>> bind((x^3+2x-1)^3, 1)
8
>>> log(128, 2)
7

功能

  • 浮点多项式上的 +-*/^ 运算符
  • 科学记数法和负数
  • 使用 x 符号表示多项式
  • 使用 = 运算符解决线性方程求解器
  • 内置函数 log(number, base)log10(number)bind(polynomial, x value)
  • 常量 pie
  • 从stdin读取输入(可用于管道传输)
  • 具有历史记录的交互式readline-like模式

安装

您需要Rust编程语言环境(适用于稳定版、beta版和nightly版)。如果您还没有安装,请使用rustup.rs轻松安装完整环境。然后您可以使用cargo install xxcalc --features interactive从crates.io安装打包版本。

编译

从源代码的基本编译过程只是运行命令行中的cargo

$ cargo build --release
$ ./target/release/xxcalc
2+2
4

然后您可以将xxcalc二进制文件复制到您喜欢的任何位置(例如/usr/local/bin),但是这样构建的二进制文件是非交互式的,没有历史记录自动补全支持。

为了构建支持历史记录的计算器(存储在~/.xxcalcrs_history中),您需要启用interactive特性(它将自动解析依赖项到rustyline

$ cargo build --release --features interactive
$ ./target/release/xxcalc
>>> 2+2
4

基准测试

即将推出。它的速度至少比bc快2.5倍,比GNU Octave快得多。

xxcalc计算器提供了一种干净且文档良好的API。请参阅其文档

该库基于稳定版、beta版和nightly版构建,不需要其他依赖项,除非启用了交互式特性。因此,您可以轻松地将数学表达式评估器添加到您的项目中。

计算器旨在可扩展——您可以注册您自己的函数或常量。您甚至可以更改自己的标记器、解析器或评估器。此外,Polynomial是一种独立的类型,可以在不使用计算器的其他功能的情况下在您的项目中使用。

用法

xxcalc添加到您的Cargo.toml中的依赖项,然后只需使用xxcalc crate和您需要的部分。

# Cargo.toml
[dependencies]
xxcalc = "0.2.1"
extern crate xxcalc;

use xxcalc::linear_solver::LinearSolver;
use xxcalc::calculator::Calculator;

fn main() {
  println!("The result is {}", LinearSolver.process("2+2").unwrap());
}

有关用法提示和场景的详细信息,请参阅文档

测试

该项目经过彻底的单元测试,一些示例直接提供在文档中。使用cargo test运行单元测试。

如果您有Rust nightly编译器,可以使用cargo bench运行一些内置基准测试。一些更广泛的基准测试(使用大型表达式)可以使用carbo bench -- --ignored运行。

许可证

该项目采用MIT许可证,作者为Amadeusz Juskowiak [email protected],请随时提问或雇佣我。

依赖关系

~100–560KB
~12K SLoC