The
-fpmode compiler option specifies whether speed or precision is more important for floating point math. If this option is not specified, the default is
-fpmode PRECISE.
-fpmode FAST will generate faster, less accurate instructions for certain floating point operations.
-fpmode PRECISE will generate standard floating point instructions that operate at the default speed and accuracy of the selected floating point unit.
In
-fpmode PRECISE, floating-point addition, subtraction, and multiplication retain their parsed grouping. In
-fpmode FAST, the compiler may reassociate these operations, which can change rounding.
The operations that use faster, less accurate instructions in
-fpmode FAST are:
Sin(),
Cos(), reciprocal, and reciprocal
Square Root, all of which must operate on
Single precision values.
A number of changes were made to normalize handling of NaN's (Not a Number) to get consistent results across toolchains and platforms, but that costs extra code, so intention was that
-fpmode FAST could allow user to skip that extra code generation if they wanted (and they assume responsibility how things work or do not work across platforms).
Note:
- for x86 and x86_64, default is -fpu x87 -fpmode PRECISE
- -fpmode FAST|PRECISE controls code generation by fbc only
- for optimizing with '-gen gcc' backend, use '-Wc -ffast-math'