contains methods for performing basic numeric operations such as the elementary exponential, logarithm, square root, and trigonometric functions.
To help ensure portability of Java programs, the definitions of some of the numeric functions in this package require that they produce the same results as certain published algorithms. These algorithms are available from the well-known network library
netlib as the package "Freely Distributable Math Library,"
fdlibm. These algorithms, which are written in the C programming language, are then to be understood as executed with all floating-point operations following the rules of Java floating-point arithmetic.
The Java math library is defined with respect to
fdlibm version 5.3. Where
fdlibm provides more than one definition for a function (such as
acos), use the "IEEE 754 core function" version (residing in a file whose name begins with the letter
e). The methods which require
fdlibm semantics are
The platform uses signed two's complement integer arithmetic with int and long primitive types. The developer should choose the primitive type to ensure that arithmetic operations consistently produce correct results, which in some cases means the operations will not overflow the range of values of the computation. The best practice is to choose the primitive type and algorithm to avoid overflow. In cases where the size is
long and overflow errors need to be detected, the methods
toIntExact throw an
ArithmeticException when the results overflow. For other arithmetic operations such as divide, absolute value, increment by one, decrement by one, and negation overflow occurs only with a specific minimum or maximum value and should be checked against the minimum or maximum as appropriate.