Average Error: 0.1 → 0.1
Time: 2.1m
Precision: 64
\[0 \lt m \land 0 \lt v \land v \lt 0.25\]
\[\left(\frac{m \cdot \left(1 - m\right)}{v} - 1\right) \cdot \left(1 - m\right)\]
\[\left(1 - m\right) \cdot \left(\mathsf{fma}\left(\left(\frac{m}{v}\right), \left(-m\right), \left(\frac{m}{v}\right)\right) - 1\right)\]
\left(\frac{m \cdot \left(1 - m\right)}{v} - 1\right) \cdot \left(1 - m\right)
\left(1 - m\right) \cdot \left(\mathsf{fma}\left(\left(\frac{m}{v}\right), \left(-m\right), \left(\frac{m}{v}\right)\right) - 1\right)
double f(double m, double v) {
        double r7985413 = m;
        double r7985414 = 1.0;
        double r7985415 = r7985414 - r7985413;
        double r7985416 = r7985413 * r7985415;
        double r7985417 = v;
        double r7985418 = r7985416 / r7985417;
        double r7985419 = r7985418 - r7985414;
        double r7985420 = r7985419 * r7985415;
        return r7985420;
}

double f(double m, double v) {
        double r7985421 = 1.0;
        double r7985422 = m;
        double r7985423 = r7985421 - r7985422;
        double r7985424 = v;
        double r7985425 = r7985422 / r7985424;
        double r7985426 = -r7985422;
        double r7985427 = fma(r7985425, r7985426, r7985425);
        double r7985428 = r7985427 - r7985421;
        double r7985429 = r7985423 * r7985428;
        return r7985429;
}

Error

Bits error versus m

Bits error versus v

Derivation

  1. Initial program 0.1

    \[\left(\frac{m \cdot \left(1 - m\right)}{v} - 1\right) \cdot \left(1 - m\right)\]
  2. Taylor expanded around inf 0.1

    \[\leadsto \left(\color{blue}{\left(\frac{m}{v} - \frac{{m}^{2}}{v}\right)} - 1\right) \cdot \left(1 - m\right)\]
  3. Simplified0.1

    \[\leadsto \left(\color{blue}{\mathsf{fma}\left(\left(\frac{m}{v}\right), \left(-m\right), \left(\frac{m}{v}\right)\right)} - 1\right) \cdot \left(1 - m\right)\]
  4. Final simplification0.1

    \[\leadsto \left(1 - m\right) \cdot \left(\mathsf{fma}\left(\left(\frac{m}{v}\right), \left(-m\right), \left(\frac{m}{v}\right)\right) - 1\right)\]

Reproduce

herbie shell --seed 2019128 +o rules:numerics
(FPCore (m v)
  :name "b parameter of renormalized beta distribution"
  :pre (and (< 0 m) (< 0 v) (< v 0.25))
  (* (- (/ (* m (- 1 m)) v) 1) (- 1 m)))