Average Error: 0.1 → 0.1
Time: 2.3m
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 r6922792 = m;
        double r6922793 = 1.0;
        double r6922794 = r6922793 - r6922792;
        double r6922795 = r6922792 * r6922794;
        double r6922796 = v;
        double r6922797 = r6922795 / r6922796;
        double r6922798 = r6922797 - r6922793;
        double r6922799 = r6922798 * r6922794;
        return r6922799;
}

double f(double m, double v) {
        double r6922800 = 1.0;
        double r6922801 = m;
        double r6922802 = r6922800 - r6922801;
        double r6922803 = v;
        double r6922804 = r6922801 / r6922803;
        double r6922805 = -r6922801;
        double r6922806 = fma(r6922804, r6922805, r6922804);
        double r6922807 = r6922806 - r6922800;
        double r6922808 = r6922802 * r6922807;
        return r6922808;
}

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 0 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 2019125 +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)))