#计算器 #科学 #命令行界面 #cli #数学

bin+lib sci-calc

一个功能齐全的带有命令行界面的科学计算器

2 个稳定版本

1.0.1 2024年6月23日
1.0.0 2024年6月22日

#6 in #科学

MIT 许可证

23KB
552

sci-calc

一个易于使用,功能齐全的带有命令行界面的科学计算器库。

$ sci-calc
2 + 2
 = 4
a = ans * pi
 = 12.566370614359172
cos(a)
 = 1
exit
$

功能

  • 变量赋值和回叫
  • 全面的内置函数和常数
  • 带有行编辑和历史回叫的命令行界面
  • 优雅的,详尽的错误处理

使用 cargo 将此软件包添加到您的项目中

cargo add sci-calc

以下是一个快速程序,实现了 sci-calc 软件包,有关详细信息,请参阅完整文档

use std::io::stdin;
use sci_calc::{calculate, context::Context};

fn main() {
	let mut ctx = Context::new();
	loop {
		let mut input = String::new();
		std::io::stdin().read_line(&mut input).unwrap();
		match calculate(input.as_str(), &mut ctx) {
			Ok(result) => println!(" = {result}"),
			Err(e) => println!("{e}"),
		}
	}
}

命令行界面

从源代码编译

cargo build --release --bin sci-calc

这将编译二进制文件到 target/release/sci-calc。运行带有方程作为参数的二进制文件来评估该表达式,或运行不带参数来使用计算器作为交互式解释器。使用 Ctrl-C 或 exit 关键字退出程序。

$ sci-calc 5 + 5
 = 10
$ sci-calc
5 + 5
 = 10
ans * 2
 = 20
exit
$

内容

基本算术

5 + 5 * 2^3
 = 45
1.23e5 * 4.56e-6
 = 0.56088
20!
 = 2432902008176640000

实现的运算符按照优先级从高到低排序

  • 加法:+-
  • 乘法:*/%(取模),//(向下取整除)
  • 指数:^
  • 阶乘:!

变量回叫

a = 1 + 1
 = 2
b = 2 * 2
 = 4
a + b
 = 6
ans + 4
 = 10

内置函数

变量

e
 = 2.718281828459045
2 * pi
 = 6.283185307179586
ans / 2
 = 3.141592653589793

函数

sqrt(2)
 = 1.4142135623730951
ln(e)
 = 1
2 * asin(1)
 = 3.141592653589793
stddev(1, 2, 3)
 = 0.816496580927726

所有实现的函数

  • 平方根 sqrt(x)n 次根 root(x, root)
  • 阶乘 fac(x),与 ! 运算符相同
  • 平均值 mean(x, y, ...) 和标准差 stddev(x, y, ...)
  • 三角函数:sin(x)cos(x)tan(x)
    • 反函数:asin(x)...
    • 双曲函数:sinh(x)...
    • 双曲反函数:asinh(x)...
  • 最小值 min(x, y) 和最大值 max(x, y)
  • 自然对数 ln(x)、以10为底的对数 log10(x) 和以n为底的对数 log(x)
  • 绝对值 abs(x)、四舍五入 round(x)、向下取整 floor(x) 和向上取整 ceil(x)

错误

解析错误示例

5 +
Parser error: Unexpected EOI

5 + + 5
Parser error: Unexpected token
| 5 + + 5
|     └── here

5@ + 5
Parser error: Invalid token
| 5@ + 5
|  └── here

变量错误示例

ans * 2
Calculation error: Cannot use 'ans' without a previous evaluated equation

pi = 3
Assignment error: Can't assign value to constant 'pi'

a + 5
Undefined identifier: Unknown variable 'a'

依赖

~6–15MB
~183K SLoC