16 unstable releases (5 breaking)
0.8.0 | Jun 7, 2024 |
---|---|
0.7.1 | Dec 29, 2023 |
0.7.0 | Oct 7, 2023 |
0.6.5 | Mar 10, 2023 |
0.6.0 | Jan 16, 2022 |
#301 in Math
953 downloads per month
Used in hpnc
45KB
998 lines
hpn
A Rust library that implements a RPN-style stack-based calculator inspired by the HP Voyager series of calculators.
Documentation
Find current docs at docs.rs.
License
HPN is distributed under the terms of the MIT license.
See LICENSE.txt for details.
lib.rs
:
HP Voyager-inspired text-based RPN calculator
Originating from a deep desire to have an RPN calculator from inside an IRC session, the HPN
struct evaluates stack-based calculator instructions in a HP Voyager-inspired "virtual
calculator".
HPN uses a 4-register stack-based RPN implementation based on and inspired by the HP Voyager series of calculators.
Calculator state and history are preserved inside the HPN
object.
The current state of registers are available as instance methods; eg, hpn.x()
, hpn.y()
,
etc.
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());
Snapshots of each operation performed are available via the HPN::tape()
instance method.
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 ]
Command-line Client
The easiest way to use this calculator is via the CLI client 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
>
Dependencies
~1–1.6MB
~30K SLoC