Average Error: 12.2 → 0.3
Time: 49.5s
Precision: 64
\[\left(\left(3 + \frac{2}{r \cdot r}\right) - \frac{\left(0.125 \cdot \left(3 - 2 \cdot v\right)\right) \cdot \left(\left(\left(w \cdot w\right) \cdot r\right) \cdot r\right)}{1 - v}\right) - 4.5\]
\[\left(3 - \mathsf{fma}\left(\frac{\left(w \cdot r\right) \cdot 0.125}{\frac{1 - v}{\mathsf{fma}\left(-2, v, 3\right)}}, w \cdot r, 4.5\right)\right) + \frac{\frac{2}{r}}{r}\]
\left(\left(3 + \frac{2}{r \cdot r}\right) - \frac{\left(0.125 \cdot \left(3 - 2 \cdot v\right)\right) \cdot \left(\left(\left(w \cdot w\right) \cdot r\right) \cdot r\right)}{1 - v}\right) - 4.5
\left(3 - \mathsf{fma}\left(\frac{\left(w \cdot r\right) \cdot 0.125}{\frac{1 - v}{\mathsf{fma}\left(-2, v, 3\right)}}, w \cdot r, 4.5\right)\right) + \frac{\frac{2}{r}}{r}
double f(double v, double w, double r) {
        double r1086702 = 3.0;
        double r1086703 = 2.0;
        double r1086704 = r;
        double r1086705 = r1086704 * r1086704;
        double r1086706 = r1086703 / r1086705;
        double r1086707 = r1086702 + r1086706;
        double r1086708 = 0.125;
        double r1086709 = v;
        double r1086710 = r1086703 * r1086709;
        double r1086711 = r1086702 - r1086710;
        double r1086712 = r1086708 * r1086711;
        double r1086713 = w;
        double r1086714 = r1086713 * r1086713;
        double r1086715 = r1086714 * r1086704;
        double r1086716 = r1086715 * r1086704;
        double r1086717 = r1086712 * r1086716;
        double r1086718 = 1.0;
        double r1086719 = r1086718 - r1086709;
        double r1086720 = r1086717 / r1086719;
        double r1086721 = r1086707 - r1086720;
        double r1086722 = 4.5;
        double r1086723 = r1086721 - r1086722;
        return r1086723;
}

double f(double v, double w, double r) {
        double r1086724 = 3.0;
        double r1086725 = w;
        double r1086726 = r;
        double r1086727 = r1086725 * r1086726;
        double r1086728 = 0.125;
        double r1086729 = r1086727 * r1086728;
        double r1086730 = 1.0;
        double r1086731 = v;
        double r1086732 = r1086730 - r1086731;
        double r1086733 = -2.0;
        double r1086734 = fma(r1086733, r1086731, r1086724);
        double r1086735 = r1086732 / r1086734;
        double r1086736 = r1086729 / r1086735;
        double r1086737 = 4.5;
        double r1086738 = fma(r1086736, r1086727, r1086737);
        double r1086739 = r1086724 - r1086738;
        double r1086740 = 2.0;
        double r1086741 = r1086740 / r1086726;
        double r1086742 = r1086741 / r1086726;
        double r1086743 = r1086739 + r1086742;
        return r1086743;
}

Error

Bits error versus v

Bits error versus w

Bits error versus r

Derivation

  1. Initial program 12.2

    \[\left(\left(3 + \frac{2}{r \cdot r}\right) - \frac{\left(0.125 \cdot \left(3 - 2 \cdot v\right)\right) \cdot \left(\left(\left(w \cdot w\right) \cdot r\right) \cdot r\right)}{1 - v}\right) - 4.5\]
  2. Simplified0.3

    \[\leadsto \color{blue}{\frac{2}{r \cdot r} + \left(3 - \mathsf{fma}\left(\frac{0.125 \cdot \left(w \cdot r\right)}{\frac{1 - v}{\mathsf{fma}\left(-2, v, 3\right)}}, w \cdot r, 4.5\right)\right)}\]
  3. Using strategy rm
  4. Applied associate-/r*0.3

    \[\leadsto \color{blue}{\frac{\frac{2}{r}}{r}} + \left(3 - \mathsf{fma}\left(\frac{0.125 \cdot \left(w \cdot r\right)}{\frac{1 - v}{\mathsf{fma}\left(-2, v, 3\right)}}, w \cdot r, 4.5\right)\right)\]
  5. Final simplification0.3

    \[\leadsto \left(3 - \mathsf{fma}\left(\frac{\left(w \cdot r\right) \cdot 0.125}{\frac{1 - v}{\mathsf{fma}\left(-2, v, 3\right)}}, w \cdot r, 4.5\right)\right) + \frac{\frac{2}{r}}{r}\]

Reproduce

herbie shell --seed 2019144 +o rules:numerics
(FPCore (v w r)
  :name "Rosa's TurbineBenchmark"
  (- (- (+ 3 (/ 2 (* r r))) (/ (* (* 0.125 (- 3 (* 2 v))) (* (* (* w w) r) r)) (- 1 v))) 4.5))