ref: d3d1b3b47ff80f451c6c9f8b7f1262fef6545f2b
dir: /man/2/math-0intro/
.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.