4 个版本 (2 个重大变更)

0.4.0 2022年8月7日
0.3.0 2021年2月24日
0.2.1 2021年2月12日
0.1.0 2020年5月21日
0.0.2 2014年11月21日

#270 in 数学

每月32次下载

GPL-3.0-only

44KB
983

calc

Build and Test Status

另一个 CLI 计算器。受优秀项目 https://github.com/alfredxing/calc 启发。

安装

在有 Rust 工具链的情况下

cargo install --force calc

或者,您也可以下载最新 发布版 的预编译可执行文件。

使用方法

表达式模式

$ calc "1/(2+(3*(4-5)))"
-1
$ calc "round(12345 / 543)"
23

当存在非标志参数时,calc 将其解释为表达式并立即计算。

Shell 模式

$ calc
[0]: 1 + 1
2
[1]: 3*(5/(3-4))
-15
[2]: 3*pi**2
29.608813203268074
[3]: @+1
30.608813203268074
[4]: @@@*2
-30
[5]: ln(-1)
NaN

在没有非标志参数的情况下,calc 启动一个简单的 shell,仅计算每行输入。

参考

数据类型

calc 的每次调用都将所有参数解释为单个数据类型。默认情况下,f64,但可以通过命令行标志选择其他数据类型

  • f64(默认值):有符号 64 位浮点运算
  • u64:无符号 64 位整数运算
  • i64:有符号 64 位整数运算

请注意,选择的数据类型将限制可用的运算符、函数和常量。例如,三角运算在整数上不可用,而位移运算在浮点上不可用。

数字输入格式

数字可以在任何位置包含 _ 字符。这些符号被忽略;它们仅用于用户便利性和可读性。

calc 可以处理多种数字基的输入。

  • 未注解的数字假定为十进制。例如:123.45

    注意:这是非整数数字的唯一合法格式。

  • 带有前缀 0b 的数字是以二进制表示的。例如:0b0110_1010

  • 带有前缀 0o 的数字是以八进制表示的。例如:0o755

    注意:数字前的单个 0 本身不是八进制前缀。例如:0755 等于 0d755

  • 带有前缀 0d 的数字是以十进制表示的。例如:1234_5678

  • 带有前缀 0x 的数字是以十六进制表示的。例如:0xdead_beef

可以混合不同基数的输入。

数字输出格式

可以通过在表达式中添加一个 : 符号后跟一个格式指定符来指定表达式的输出格式。

格式指定符可以是 num-runtime-fmt crate 识别的任何内容。

$ calc -u "0o644 | 0o111 :#o"
0o755
$ calc -u '0o755 & !0o111 :04o'
0644
[0]: 0xab :b 4
1010 1011
[1]: @[0] >>> 4 :x_4
b000_0000_0000_000a
[2]: @ & 0xF :4b
1010
$ calc pi / 3 :v#04.4
0d01.0471

运算顺序

以下运算顺序用于解析表达式

  • 括号 ((...))
  • 一元前缀运算符 (- !)
  • 移位和指数运算 (<< >> <<< >>> **)
  • 位运算 (& | ^)
  • 乘法和除法 (* / // %)
  • 加法和减法 (+ -)

具有相同优先级的运算从左到右解析。

一元前缀运算符

  • -:取反
  • !:按位非

中缀运算符

  • +:加法
  • -:减法
  • *:乘法
  • /:除法
  • //:截断除法:除法并截断所有小数点后的数据。
  • **:指数运算
  • %:算术余数
  • <<:左移
  • >>:右移
  • <<<:循环左移(旋转左移)
  • >>>:循环右移(旋转右移)
  • &:按位与
  • |:按位或
  • ^:按位异或

函数

  • abs:绝对值
  • ceil:大于或等于输入的最小整数
  • floor:小于或等于输入的最大整数
  • round:最接近输入的整数;对于中间值,远离0.0
  • sin:正弦
  • cos:余弦
  • tan:正切
  • sinh:双曲正弦
  • cosh:双曲余弦
  • tanh:双曲正切
  • asin:反正弦
  • acos:反余弦
  • atan:反正切
  • asinh:反双曲正弦
  • acosh:反双曲余弦
  • atanh:反双曲正切
  • rad:将度数转换为弧度
  • dec:将弧度转换为度数
  • sqrt:平方根
  • cbrt:立方根
  • log:以10为底的对数
  • lg:以2为底的对数
  • ln:自然对数(底为e)
  • exp:e的x次方

三角函数以弧度为单位进行运算。

常数

  • e:欧拉数
  • pi:阿基米德常数
  • π:阿基米德常数

历史

在shell模式下,calc 会将所有表达式的结果保存在内存中,直到退出。

伪变量 @ 总是指向前一个表达式的结果。伪变量 @@ 总是指向前一个表达式的结果。可以使用任意数量的 @ 符号进行链式引用。

直接链式引用 @ 符号可能会变得繁琐。语法 @{N},其中 N 是一个整数,指向前一个的第N个结果。 @{1} 总是指向前一个表达式的结果;它与 @ 等价。 @{3} 指的是三个表达式前的结果;它与 @@@ 等价。

伪变量 @[0] 总是指当前shell会话中的第一个表达式的结果。同样,@[1] 指的是第二个,依此类推。shell界面指示当前表达式。

警告

不支持隐式乘法

不支持隐式乘法。请使用乘法运算符,如 *

浮点数错误

浮点数运算可能会累积损失,而 calc 没有特别努力来防止这类错误。例如

$ calc 'sin(rad(45)) - (sqrt(2) / 2)'
-0.00000000000000011102230246251565

结构体

此crate包含库代码和CLI代码。CLI代码全部被功能cli所限制;cli功能默认包含。这意味着CLI默认会构建。然而,您可以在Cargo.toml中包含,这样就可以使用此crate作为库而不构建任何CLI代码。

[dependencies]
calc = { version = "*", default-features = false }

依赖项

~3–15MB
~185K SLoC