rpn.1: made more precise

This commit is contained in:
Emma Tebibyte 2024-02-02 20:12:12 -07:00
parent 4993c53080
commit a30152d783
Signed by untrusted user: emma
GPG Key ID: 06FA419A1698C270

View File

@ -1,4 +1,5 @@
.\" Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media> .\" Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
.\" Copyright (c) 2024 DTB <trinity@trinity.moe>
.\" .\"
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license, .\" 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/>. .\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
@ -7,47 +8,48 @@
.SH NAME .SH NAME
npc \(en reverse polish notation evaluation rpn \(en reverse polish notation evaluation
.SH SYNOPSIS .SH SYNOPSIS
rpn [integers...] [operations...] rpn
.RB [numbers...]\ [operators...]
.SH DESCRIPTION .SH DESCRIPTION
Rpn parses reverse polish notation and adds characters to the stack until there Rpn parses and and evaluates reverse polish notation either from the standard
is an operation. See rpn(7) for more details on the syntax of reverse polish input or by parsing its arguments. See the STANDARD INPUT section.
notation.
For information on for reverse polish notation syntax, see rpn(7).
.SH STANDARD INPUT .SH STANDARD INPUT
If rpn is passed arguments, it interprets those arguments as an expression to If rpn is passed arguments, it interprets them as an expression to be evaluated.
be evaluated. Otherwise, it reads characters from standard input to add to the Otherwise, it reads whitespace-delimited numbers and operations from the
stack. standard input.
.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.
.SH DIAGNOSTICS .SH DIAGNOSTICS
If encountering a syntax error, rpn will exit with the appropriate error code If encountering a syntax error, rpn will exit with the appropriate error code
as defined by sysexits.h(3) and print an error message. as defined by sysexits.h(3) and print an error message.
.SH CAVEATS
Due to the complexity of integer storage in memory, rpn is only capable of
parsing decimal integers.
Additionally, due to the laws of physics, floating-point math can only be as
precise as slightly less than the machine epsilon of the hardware on which rpn
is running.
.SH RATIONALE .SH RATIONALE
POSIX has its own calculator in the form of bc(1p), which uses standard input An infix notation calculation utility, bc(1p), is included in the POSIX
for its calculations. Pair the clunkiness of piping expressions into it and its standard, but it doesnt accept expressions as arguments; in scripts, any
use of standard notation, it was clear what rpn should be. 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
There are no mathematics in the qi(1) shell because it was decided early on that for the former, and was included in UNIX v2 onward. While it implements reverse
math was the job of a specific tool and not the shell itself. Thus, rpn was polish notation, it still suffers from being unable to accept an expression as
born. an argument.
.SH AUTHOR .SH AUTHOR
@ -60,4 +62,4 @@ Copyright (c) 2024 Emma Tebibyte. License AGPLv3+: GNU AGPL version 3 or later
.SH SEE ALSO .SH SEE ALSO
bc(1p), dc(1) rpn(7), bc(1p), dc(1), IEEE 754