If an application uses many floating point functions it is often the case
that the cost of the function calls themselves is not negligible.
Modern processors can often execute the operations themselves
very fast, but the function call disrupts the instruction pipeline.
For this reason the GNU C Library provides optimizations for many of the
frequently-used math functions. When GNU CC is used and the user
activates the optimizer, several new inline functions and macros are
defined. These new functions and macros have the same names as the
library functions and so are used instead of the latter. In the case of
inline functions the compiler will decide whether it is reasonable to
use them, and this decision is usually correct.
This means that no calls to the library functions may be necessary, and
can increase the speed of generated code significantly. The drawback is
that code size will increase, and the increase is not always negligible.
There are two kind of inline functions: Those that give the same result
as the library functions and others that might not set errno and
might have a reduced precision and/or argument range in comparison with
the library functions. The latter inline functions are only available
if the flag -ffast-math is given to GNU CC.
In cases where the inline functions and macros are not wanted the symbol
__NO_MATH_INLINES should be defined before any system header is
included. This will ensure that only library functions are used. Of
course, it can be determined for each file in the project whether
giving this option is preferable or not.
Not all hardware implements the entire IEEE 754 standard, and even
if it does there may be a substantial performance penalty for using some
of its features. For example, enabling traps on some processors forces
the FPU to run un-pipelined, which can more than double calculation time.
Published under the terms of the GNU General Public License