The GL must perform a number of floating-point operations during the
course of its operation.
We do not specify how floating-point numbers are to be represented or
how operations on them are to be performed.
We require simply that numbers' floating-point parts contain enough bits
and that their exponent fields are large enough so that individual results of
floating-point operations are accurate to about 1 part in .
The maximum representable magnitude of a floating-point number used
to represent positional or normal coordinates must
be at least
;
the maximum representable magnitude for colors or texture coordinates
must be at least
.
The maximum representable magnitude for all other floating-point
values must be at least
.
for any non-infinite and non-NaN x.
. x + 0 = 0 + x = x.
.
(Occasionally further requirements will be specified.)
Most single-precision floating-point formats meet these requirements.
Any representable floating-point value is legal as input to a GL command that requires floating-point data. The result of providing a value that is not a floating-point number to such a command is unspecified, but must not lead to GL interruption or termination. In IEEE arithmetic, for example, providing a negative zero or a denormalized number to a GL command yields predictable results, while providing a NaN or an infinity yields unspecified results.
Some calculations require division. In such cases (including implied divisions required by vector normalizations), a division by zero produces an unspecified result but must not lead to GL interruption or termination.