fast_normalize3clc
Normal vector length 1.
floatn fast_normalize(floatn p);
Overview
Returns a vector in the same direction as p but with a length of 1. fast_normalize is computed as:
p * sqrt(3clc)(p.x2 + p.y2 +...)
The result shall be within 8192 ulps error from the infinitely precise result of:
if ( any(3clc)(p == 0.0f)) result = p; else result = p / sqrt(3clc)(p.x2 + p.y2 +...);
with the following exceptions:
1. If the sum of squares is greater than FLT_MAX then the value of the floating-point values in the result vector are undefined.
2. If the sum of squares is less than FLT_MIN then the implementation may return back p.
3. If the device is in 'denorms are flushed to zero' mode, individual operand elements with magnitude less than sqrt(3clc)(FLT_MIN) may be flushed to zero before proceeding with the calculation.
Notes
Built-in geometric functions operate component-wise. The description is per-component. floatn is float, float2, float3, or float4 and doublen is double, double2, double3, or double4. The built-in geometric functions are implemented using the round to nearest even rounding mode.
The geometric functions can be implemented using contractions such as mad(3clc) or fma(3clc).
Specification
OpenCL Specification[1]
Notes
- 1.
-
OpenCL Specification
page 262, section 6.12.5 - Geometric Functions
Releases
5 releases since Debian 8 (Jessie); the text changed 3 times.