  
    <!-- section 6.13.2 Math Functions -->
    <para>
        The built-in math functions are categorized into the following:
    </para>

    <para>
      <itemizedlist>
        <listitem>A list of built-in functions that have scalar or vector argument versions, and,</listitem>
        <listitem>A list of built-in functions that only take scalar float arguments.</listitem>
      </itemizedlist>
    </para>

    <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. For any specific use of these
    function, the actual type has to be the same for all arguments and the return type unless
    otherwise specified.
  </para>

  <para>
    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>, <type>float16</type>, <type>double</type>, <type>double2</type>,
    <type>double3</type>, <type>double4</type>, <type>double8</type>, or <type>double16</type>
    as the type for the arguments.
  </para>

  <para>
    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>

  <para>
    The generic type name <type>gentypef</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.
  </para>

  <para>
    The generic type name <type>gentyped</type> is used to indicate that the function can take
    <type>double</type>, <type>double2</type>, <type>double3</type>, <type>double4</type>,
    <type>double8</type>, or <type>double16</type> as the type for the arguments.
  </para>

<!-- 25-Dec-2013, rev. 19 -->

