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-02-02 23:24:45 -07:00
|
|
|
|
Rpn parses and and evaluates reverse polish notation expressions either from the
|
|
|
|
|
standard input or by parsing its arguments. See the STANDARD INPUT section.
|
2024-02-02 20:12:12 -07:00
|
|
|
|
|
2024-02-03 17:20:31 -07:00
|
|
|
|
Upon evaluation, rpn will print the resulting number on the stack to the
|
|
|
|
|
standard output. Any further specified numbers will be placed on the stack
|
|
|
|
|
following the last outputted number.
|
|
|
|
|
|
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-02-02 20:12:12 -07:00
|
|
|
|
If rpn is passed arguments, it interprets them as an expression to be evaluated.
|
|
|
|
|
Otherwise, it reads whitespace-delimited numbers and operations from the
|
|
|
|
|
standard input.
|
|
|
|
|
|
2024-02-03 17:20:31 -07:00
|
|
|
|
.SH DIAGNOSTICS
|
|
|
|
|
|
|
|
|
|
If encountering a syntax error, rpn will exit with the appropriate error code
|
|
|
|
|
as defined by sysexits.h(3) and print an error message.
|
|
|
|
|
|
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
|
|
|
|
|
second-highest float that can be represented in line with this standard to round
|
|
|
|
|
numbers to before outputting.
|
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
|
|
|
|
|
standard, but it doesn’t accept expressions as arguments; in scripts, any
|
|
|
|
|
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
|