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.