Hide navigation sidebar
Hide table of contents sidebar
Back to top
Toggle table of contents sidebar

# Scalar IEEE 754 float API

group scalar_f32_api

  Functions

  void f32_unpack(int32_t *mantissa, exponent_t *exp, const float input)

    Unpack an IEEE 754 single-precision float into a 32-bit mantissa and exponent.

    Example

          // Unpack 1.52345246 * 10^(-5)
          float val = 1.52345246e-5;
          int32_t mant;
          exponent_t exp;
          f32_unpack(&mant, &exp, val);

          printf("%ld * 2^(%d) <-- %e\n", mant, exp, val);

    Parameters:

      - mantissa – [out] Unpacked output mantissa

      - exp – [out] Unpacked output exponent

      - input – [in] Float value to be unpacked

  void f32_unpack_s16(int16_t *mantissa, exponent_t *exp, const float input)

    Unpack an IEEE 754 single-precision float into a 16-bit mantissa and exponent.

    Example

          // Unpack 1.52345246 * 10^(-5)
          float val = 1.52345246e-5;
          int16_t mant;
          exponent_t exp;
          f32_unpack_s16(&mant, &exp, val);

          printf("%ld * 2^(%d) <-- %e\n", mant, exp, val);

    Note

    This operation may result in a loss of precision.

    Parameters:

      - mantissa – [out] Unpacked output mantissa

      - exp – [out] Unpacked output exponent

      - input – [in] Float value to be unpacked

  float_s32_t f32_to_float_s32(const float x)

    Convert an IEEE754 `float` to a float_s32_t.

    Parameters:

      - x – [in] Input value

    Throws ET_ARITHMETIC:

      Raised if `x` is infinite or NaN

    Returns:

      `float_s32_t` representation of `x`

  float_s32_t f64_to_float_s32(const double x)

    Convert an IEEE754 `double` to a float_s32_t.

    Note

    This operation may result in precision loss.

    Parameters:

      - x – [in] Input value

    Throws ET_ARITHMETIC:

      Raised if `x` is infinite or NaN

    Returns:

      `float_s32_t` representation of `x`

  float f32_sin(const float theta)

    Get the sine of a specified angle.

    Computes \(sin(\theta)\) using the power series expansion of \(sin()\) truncated to 8 terms.

    This implementation is meant to make optimal use of the XS3 floating-point unit.

    Parameters:

      - theta – [in] Angle \(\theta\) to compute the sine of (in radians)

    Throws ET_ARITHMETIC:

      Raised if \(\theta\) is infinite or NaN

    Returns:

      Sine of the angle \(\theta\)

  float f32_cos(const float theta)

    Get the cosine of a specified angle.

    Computes \(cos(\theta) = sin(\theta+\frac{\pi}{2}\) using the power series expansion of \(sin()\) truncated to 8 terms.

    This implementation is meant to make optimal use of the XS3 floating-point unit.

    Parameters:

      - theta – [in] Angle \(\theta\) to compute the cosine of (in radians)

    Throws ET_ARITHMETIC:

      Raised if \(\theta\) is infinite or NaN

    Returns:

      Cosine of the angle \(\theta\)

  float f32_log2(const float x)

    Get the base-2 logarithm of the specified value.

    This function computes \(log_2(x)\) using the power series expansion of \(log_2()\) truncated to 11 terms.

    Parameters:

      - x – [in] Input value \(x\) to get the logarithm of.

    Throws ET_ARITHMETIC:

      Raised if \(x\) is infinite or NaN

    Returns:

      \(log_2(x)\)

  float f32_power_series(const float x, const float b[], const unsigned N)

    Compute power series summation using specified coefficients.

    This function is used to compute the sum of terms in a power series, truncated to \(N\) terms, starting with the \(x^0\) term.

    `b` is an \(N\)-element vector of coefficients \(\bar b\) which are multiplied by the corresponding powers of \(x\).

    \(N\) is the length of \(\bar b\) and number of terms to sum together.

    Operation Performed

      \[\begin{aligned} & a \leftarrow \sum_{k=0}^{N-1}\left( x^k,b_k \right) \end{aligned}\]
    Parameters:

      - x – [in] Input value \(x\).

      - b – [in] Vector of coefficients \(\bar b\).

      - N – [in] Number of power series terms to sum.

    Throws ET_ARITHMETIC:

      Raised if \(x\) or any element of \(\bar b\) is infinite or NaN.

    Returns:

      \(a\), the sum of the first \(N\) power series terms.

  float f32_normA(exponent_t *p, const float x)

    Get a representation of the input \(x\) in normalized form A.

    This function is used internally to transform a `float` value into a representation required for certain purposes.

    In particular, this function behaves much like `frexpf()`, where it is guaranteed that the returned value \(a\) is either \(0\) or that \(0.5 \le \left| a \right| < 1.0\), and the output exponent \(p\) is such that \(x = a \cdot 2^{p}\).

    In anticipation that future work may require alternative “normalized” representations, this form is being defined here as form A.

    Parameters:

      - p – [in] Output exponent \(p\)

      - x – [in] Input value \(x\)

    Throws ET_ARITHMETIC:

      Raised if \(x\) or any element of \(\bar b\) is infinite or NaN.

    Returns:

      \(a\) in normalized form A.