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.