2024-02-01 11:36:38 -07:00
|
|
|
.\" Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
2024-02-02 20:12:12 -07:00
|
|
|
.\" Copyright (c) 2024 DTB <trinity@trinity.moe>
|
2024-02-01 11:36:38 -07:00
|
|
|
.\"
|
|
|
|
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
|
|
|
|
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
|
|
|
|
|
|
|
|
.TH rpn 1
|
|
|
|
|
|
|
|
.SH NAME
|
|
|
|
|
2024-02-02 20:12:12 -07:00
|
|
|
rpn \(en reverse polish notation evaluation
|
2024-02-01 11:36:38 -07:00
|
|
|
|
|
|
|
.SH SYNOPSIS
|
|
|
|
|
2024-02-02 20:12:12 -07:00
|
|
|
rpn
|
|
|
|
.RB [numbers...]\ [operators...]
|
2024-02-01 11:36:38 -07:00
|
|
|
|
|
|
|
.SH DESCRIPTION
|
|
|
|
|
2024-03-26 19:22:30 -06:00
|
|
|
Evaluate reverse polish notation.
|
2024-02-02 20:12:12 -07:00
|
|
|
|
2024-03-26 19:22:30 -06:00
|
|
|
The program evaluates reverse polish notation expressions either read from the
|
|
|
|
standard input or parsed from provided arguments. See the STANDARD INPUT
|
|
|
|
section.
|
|
|
|
|
|
|
|
Upon evaluation, the program will print the resulting number on the stack to the
|
2024-02-07 19:11:53 -07:00
|
|
|
standard output. Any further specified numbers will be placed at the end of the
|
|
|
|
stack.
|
2024-02-03 17:20:31 -07:00
|
|
|
|
2024-02-02 20:12:12 -07:00
|
|
|
For information on for reverse polish notation syntax, see rpn(7).
|
2024-02-01 11:36:38 -07:00
|
|
|
|
|
|
|
.SH STANDARD INPUT
|
|
|
|
|
2024-03-26 19:22:30 -06:00
|
|
|
If arguments are passed , they are interpreted as an expression to be evaluated.
|
|
|
|
Otherwise, it reads whitespace-delimited numbers and operations from the
|
|
|
|
standard input.
|
2024-02-02 20:12:12 -07:00
|
|
|
|
2024-02-03 17:20:31 -07:00
|
|
|
.SH DIAGNOSTICS
|
|
|
|
|
2024-03-26 19:22:30 -06:00
|
|
|
In the event of a syntax error, the program will print an
|
|
|
|
|
|
|
|
In the event of an error, a debug message will be printed and the program will
|
|
|
|
exit with the appropriate sysexits.h(3) error code.
|
2024-02-03 17:20:31 -07:00
|
|
|
|
2024-02-02 20:12:12 -07:00
|
|
|
.SH CAVEATS
|
|
|
|
|
|
|
|
Due to precision constraints and the way floats are represented in accordance
|
|
|
|
with the IEEE Standard for Floating Point Arithmetic (IEEE 754), floating-point
|
|
|
|
arithmetic has rounding errors. This is somewhat curbed by using the
|
2024-02-07 19:11:53 -07:00
|
|
|
machine epsilon as provided by the Rust standard library to which to round
|
|
|
|
numbers. Because of this, variation is expected in the number of decimal places
|
2024-03-26 19:22:30 -06:00
|
|
|
the program can handle based on the platform and hardware of any given machine.
|
2024-02-01 11:36:38 -07:00
|
|
|
|
|
|
|
.SH RATIONALE
|
|
|
|
|
2024-02-02 20:12:12 -07:00
|
|
|
An infix notation calculation utility, bc(1p), is included in the POSIX
|
2024-02-07 19:11:53 -07:00
|
|
|
standard, but does not accept expressions as arguments; in scripts, any
|
2024-02-02 20:12:12 -07:00
|
|
|
predefined, non-interactive input must be piped into the program. A dc(1)
|
|
|
|
pre-dates the standardized bc(1p), the latter originally being a preprocessor
|
|
|
|
for the former, and was included in UNIX v2 onward. While it implements reverse
|
|
|
|
polish notation, it still suffers from being unable to accept an expression as
|
|
|
|
an argument.
|
2024-02-01 11:36:38 -07:00
|
|
|
|
|
|
|
.SH AUTHOR
|
|
|
|
|
|
|
|
Written by Emma Tebibyte <emma@tebibyte.media>.
|
|
|
|
|
|
|
|
.SH COPYRIGHT
|
|
|
|
|
|
|
|
Copyright (c) 2024 Emma Tebibyte. License AGPLv3+: GNU AGPL version 3 or later
|
|
|
|
<https://gnu.org/licenses/agpl.html>.
|
|
|
|
|
|
|
|
.SH SEE ALSO
|
|
|
|
|
2024-02-02 23:24:45 -07:00
|
|
|
bc(1p), dc(1), rpn(7), IEEE 754
|