#计算器 #RPN #HP #hpnc

bin+lib hpn

基于 HP Voyager 风格的基于文本的 RPN 计算器

16 个不稳定版本 (5 个破坏性更改)

0.8.0 2024 年 6 月 7 日
0.7.1 2023 年 12 月 29 日
0.7.0 2023 年 10 月 7 日
0.6.5 2023 年 3 月 10 日
0.6.0 2022 年 1 月 16 日

#335 in 数学


用于 hpnc

MIT 许可证

45KB
998

hpn

一个 Rust 库,实现了受 HP Voyager 系列计算器启发的 RPN 栈式计算器。

文档

当前文档可在 docs.rs 找到。

许可证

HPN 根据 MIT 许可证分发。

有关详细信息,请参阅 LICENSE.txt


lib.rs:

受 HP Voyager 启发的基于文本的 RPN 计算器

起源于在 IRC 会话中拥有 RPN 计算器的强烈愿望,HPN 结构在受 HP Voyager 启发的“虚拟计算器”中评估基于栈的计算器指令。

HPN 使用基于 4 个寄存器的栈式 RPN 实现,该实现基于并受 HP Voyager 系列计算器的启发。

计算器状态和历史记录保留在 HPN 对象内部。

当前寄存器状态作为实例方法提供;例如,hpn.x()hpn.y() 等。

use hpn::prelude::*;

// convert 21ºC to ºF
let mut hp = HPN::from("21 9 * 5 / 32 +");
assert_eq!(Some(69.8), hp.x().to_f64());
// or just
hp.evaluate("21 ctof");
assert_eq!(Some(69.8), hp.x().to_f64());

每个操作的性能快照可通过 HPN::tape() 实例方法获取。

let tape = hp.tape().collect::<Vec<_>>().join("\n");
println!("{tape}");
// Output:
// 0: [ T:    0.000 | Z:    0.000 | Y:    0.000 | X:    0.000 ]  <- 21
// 1: [ T:    0.000 | Z:    0.000 | Y:    0.000 | X:   21.000 ]  <- 9
// 2: [ T:    0.000 | Z:    0.000 | Y:   21.000 | X:    9.000 ]  <- *
// 3: [ T:    0.000 | Z:    0.000 | Y:    0.000 | X:  189.000 ]  <- 5
// 4: [ T:    0.000 | Z:    0.000 | Y:  189.000 | X:    5.000 ]  <- /
// 5: [ T:    0.000 | Z:    0.000 | Y:    0.000 | X:   37.800 ]  <- 32
// 6: [ T:    0.000 | Z:    0.000 | Y:   37.800 | X:   32.000 ]  <- +
// 7: [ T:    0.000 | Z:    0.000 | Y:    0.000 | X:   69.800 ]  <- 21
// 8: [ T:    0.000 | Z:    0.000 | Y:   69.800 | X:   21.000 ]  <- ctof
// 9: [ T:    0.000 | Z:    0.000 | Y:   69.800 | X:   69.800 ]

命令行客户端

使用此计算器的最简单方法是使用 CLI 客户端 hpnc

$ cargo install hpn
$ hpnc
hpnc x.x.x
> 77 ftoc
 0: [ T:    0.000 | Z:    0.000 | Y:    0.000 | X:    0.000 ]  <- 77
 1: [ T:    0.000 | Z:    0.000 | Y:    0.000 | X:   77.000 ]  <- ftoc
 2: [ T:    0.000 | Z:    0.000 | Y:    0.000 | X:   25.000 ]
=> 25
>

依赖项

~1–1.5MB
~30K SLoC