Average Error: 12.8 → 0.4
Time: 19.9s
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) - \mathsf{fma}\left(\left(w \cdot r\right) \cdot \left(w \cdot r\right), \frac{0.125}{1 - v} \cdot \mathsf{fma}\left(v, -2, 3\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) - \mathsf{fma}\left(\left(w \cdot r\right) \cdot \left(w \cdot r\right), \frac{0.125}{1 - v} \cdot \mathsf{fma}\left(v, -2, 3\right), 4.5\right)
double f(double v, double w, double r) {
        double r28393 = 3.0;
        double r28394 = 2.0;
        double r28395 = r;
        double r28396 = r28395 * r28395;
        double r28397 = r28394 / r28396;
        double r28398 = r28393 + r28397;
        double r28399 = 0.125;
        double r28400 = v;
        double r28401 = r28394 * r28400;
        double r28402 = r28393 - r28401;
        double r28403 = r28399 * r28402;
        double r28404 = w;
        double r28405 = r28404 * r28404;
        double r28406 = r28405 * r28395;
        double r28407 = r28406 * r28395;
        double r28408 = r28403 * r28407;
        double r28409 = 1.0;
        double r28410 = r28409 - r28400;
        double r28411 = r28408 / r28410;
        double r28412 = r28398 - r28411;
        double r28413 = 4.5;
        double r28414 = r28412 - r28413;
        return r28414;
}

double f(double v, double w, double r) {
        double r28415 = 3.0;
        double r28416 = 2.0;
        double r28417 = r;
        double r28418 = r28416 / r28417;
        double r28419 = r28418 / r28417;
        double r28420 = r28415 + r28419;
        double r28421 = w;
        double r28422 = r28421 * r28417;
        double r28423 = r28422 * r28422;
        double r28424 = 0.125;
        double r28425 = 1.0;
        double r28426 = v;
        double r28427 = r28425 - r28426;
        double r28428 = r28424 / r28427;
        double r28429 = -r28416;
        double r28430 = fma(r28426, r28429, r28415);
        double r28431 = r28428 * r28430;
        double r28432 = 4.5;
        double r28433 = fma(r28423, r28431, r28432);
        double r28434 = r28420 - r28433;
        return r28434;
}

Error

Bits error versus v

Bits error versus w

Bits error versus r

Derivation

  1. Initial program 12.8

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

    \[\leadsto \color{blue}{\left(3 + \frac{2}{r \cdot r}\right) - \mathsf{fma}\left(w \cdot \left(\left(r \cdot r\right) \cdot w\right), \frac{0.125}{1 - v} \cdot \mathsf{fma}\left(v, -2, 3\right), 4.5\right)}\]
  3. Taylor expanded around 0 17.1

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

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

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

Reproduce

herbie shell --seed 2019194 +o rules:numerics
(FPCore (v w r)
  :name "Rosa's TurbineBenchmark"
  (- (- (+ 3.0 (/ 2.0 (* r r))) (/ (* (* 0.125 (- 3.0 (* 2.0 v))) (* (* (* w w) r) r)) (- 1.0 v))) 4.5))