Normal vector length 1.
float n fast_normalize(float n p)
Returns a vector in the same direction as
p but with a length of 1.
fast_normalize is computed as:
p * half_rsqrt(p.x2 + p.y2 +...)
The result shall be within 8192 ulps error from the infinitely precise result of:
if (all(p == 0.0f)) result = p; else result = p / sqrt(p.x2 + p.y2 +...);
with the following exceptions:
If the sum of squares is greater than
FLT_MAXthen the value of the floating-point values in the result vector are undefined.
If the sum of squares is less than
FLT_MINthen the implementation may return back
If the device is in 'denorms are flushed to zero' mode, individual operand elements with magnitude less than
FLT_MIN) may be flushed to zero before proceeding with the calculation.
General information about built-in geometric functions: Built-in geometric functions operate component-wise.
The description is per-component.
The built-in geometric functions are implemented using the round to nearest even rounding mode.