        <para>
            The vector versions of the math functions operate component-wise. 
            The description is per-component.
        </para>
        <para>
            The built-in math functions are not affected by the prevailing rounding 
            mode in the calling environment, and always return the same value as they 
            would if called with the round to nearest even rounding mode.
        </para>
        <para>
            The built-in math functions take scalar or vector arguments. The generic type 
            name <type>gentype</type> is used to indicate that the function can take 
            <type>float</type>, <type>float2</type>, <type>float3</type>, <type>float4</type>,
            <type>float8</type>, or <type>float16</type> as the type for the arguments. For 
            any specific use of these function, the actual type has to be the same for all 
            arguments and the return type.
        </para>
        <para>
            If extended with <citerefentry><refentrytitle>cl_khr_fp64</refentrytitle></citerefentry>,
            generic type name <type>gentype</type> may indicate <type>double</type> and
            <type>double{2|3|4|8|16}</type> as arguments and return values. If extended with
            <citerefentry><refentrytitle>cl_khr_fp16</refentrytitle></citerefentry>, generic type 
            name <type>gentype</type> may indicate <type>half</type> and <type>half{2|3|4|8|16}</type> 
            as arguments and return values. 
        </para>
