Average Error: 12.6 → 0.4
Time: 3.8m
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 + \frac{\frac{2}{r}}{r}\right) - \left(\frac{\mathsf{fma}\left(v, -2, 3\right)}{\frac{1 - v}{0.125}} \cdot \left(\left(r \cdot w\right) \cdot \left(r \cdot w\right)\right) + 4.5\right)\]
\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 + \frac{\frac{2}{r}}{r}\right) - \left(\frac{\mathsf{fma}\left(v, -2, 3\right)}{\frac{1 - v}{0.125}} \cdot \left(\left(r \cdot w\right) \cdot \left(r \cdot w\right)\right) + 4.5\right)
double f(double v, double w, double r) {
        double r16070624 = 3.0;
        double r16070625 = 2.0;
        double r16070626 = r;
        double r16070627 = r16070626 * r16070626;
        double r16070628 = r16070625 / r16070627;
        double r16070629 = r16070624 + r16070628;
        double r16070630 = 0.125;
        double r16070631 = v;
        double r16070632 = r16070625 * r16070631;
        double r16070633 = r16070624 - r16070632;
        double r16070634 = r16070630 * r16070633;
        double r16070635 = w;
        double r16070636 = r16070635 * r16070635;
        double r16070637 = r16070636 * r16070626;
        double r16070638 = r16070637 * r16070626;
        double r16070639 = r16070634 * r16070638;
        double r16070640 = 1.0;
        double r16070641 = r16070640 - r16070631;
        double r16070642 = r16070639 / r16070641;
        double r16070643 = r16070629 - r16070642;
        double r16070644 = 4.5;
        double r16070645 = r16070643 - r16070644;
        return r16070645;
}

double f(double v, double w, double r) {
        double r16070646 = 3.0;
        double r16070647 = 2.0;
        double r16070648 = r;
        double r16070649 = r16070647 / r16070648;
        double r16070650 = r16070649 / r16070648;
        double r16070651 = r16070646 + r16070650;
        double r16070652 = v;
        double r16070653 = -2.0;
        double r16070654 = fma(r16070652, r16070653, r16070646);
        double r16070655 = 1.0;
        double r16070656 = r16070655 - r16070652;
        double r16070657 = 0.125;
        double r16070658 = r16070656 / r16070657;
        double r16070659 = r16070654 / r16070658;
        double r16070660 = w;
        double r16070661 = r16070648 * r16070660;
        double r16070662 = r16070661 * r16070661;
        double r16070663 = r16070659 * r16070662;
        double r16070664 = 4.5;
        double r16070665 = r16070663 + r16070664;
        double r16070666 = r16070651 - r16070665;
        return r16070666;
}

Error

Bits error versus v

Bits error versus w

Bits error versus r

Derivation

  1. Initial program 12.6

    \[\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.4

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

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

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

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

Reproduce

herbie shell --seed 2019128 +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))