Normal vector length 1.
float n fast_normalize(float n p)
Description
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_MAX
then the value of the floatingpoint values in the result vector are undefined. 
If the sum of squares is less than
FLT_MIN
then the implementation may return backp
. 
If the device is in 'denorms are flushed to zero' mode, individual operand elements with magnitude less than
sqrt
(FLT_MIN
) may be flushed to zero before proceeding with the calculation.
Notes
General information about builtin geometric functions: Builtin geometric functions operate componentwise.
The description is percomponent.
floatn
is float
, float2
, float3
, or float4
and doublen
is double
, double2
, double3
, or double4
.
The builtin geometric functions are implemented using the round to nearest even rounding mode.