shithub: purgatorio

ref: 948870cffe2572efb68ef0b3873b36238fb53263
dir: /man/2/math-0intro/

View raw version
.TH MATH-INTRO 2
.SH NAME
Math: intro \- elementary numerics
.SH SYNOPSIS
.EX
include "math.m";
math := load Math Math->PATH;
.EE
.SH DESCRIPTION
Inferno's math module and Limbo compiler provide the
fundamental floating point environment and ``elementary functions''.
.PP
Limbo expressions involving only literal and named constants are
evaluated at compile time with all exceptions ignored.
However,
arithmetic on variables is left to run-time, even if data path analysis
shows the value to be a compile time constant.
This implies that tools
generating Limbo source must do their own simplification, and not
expect the compiler to change
.B x/x
into
.BR 1 ,
or
.B -(y-x)
into
.BR x-y ,
or even
.BR x-0
into
.BR x .
.PP
Subexpression elimination and other forms of code motion may be done by the
compiler,
but not across calls to the mode and status functions described in
.IR math-fp (2).
Removal of
parentheses or factoring is not performed by the compiler.
The evaluation
order of
.B a+b+c
follows the parse tree and is therefore the same as for
.BR (a+b)+c .
These rules are the same as for Fortran and C.
.PP
Contracted multiply-add instructions (with a single rounding) are not
generated by the compiler, though they may be used in the native BLAS
(linear algebra)
libraries.
All arithmetic follows the IEEE floating point standard, except that
denormalized numbers may be replaced by flush-to-0, depending on what
the hardware makes feasible.
.PP
Binary/decimal conversion is properly rounded.
In particular, printing
a real using
.B %g
and reading it on a different machine is guaranteed to
recover identical bits, including
conversions done by the compiler.
The one exception is that
smaller, faster, but sloppier run-time conversion
routines may be used when mandated by
limited memory embedded systems.
Programmers may assume, however,
that the
features described in these man pages are present in all Inferno
systems intended for general computing.
.SH SOURCE
.B /libinterp/math.c
.SH SEE ALSO
See
.IR math-fp (2)
for floating point control and primitive arithmetic operations,
.IR math-elem (2)
for the classical elementary functions of applied mathematics,
and
.IR math-linalg (2)
for basic linear algebra functions.