Average Error: 12.5 → 0.4
Time: 25.7s
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 r809992 = 3.0;
        double r809993 = 2.0;
        double r809994 = r;
        double r809995 = r809994 * r809994;
        double r809996 = r809993 / r809995;
        double r809997 = r809992 + r809996;
        double r809998 = 0.125;
        double r809999 = v;
        double r810000 = r809993 * r809999;
        double r810001 = r809992 - r810000;
        double r810002 = r809998 * r810001;
        double r810003 = w;
        double r810004 = r810003 * r810003;
        double r810005 = r810004 * r809994;
        double r810006 = r810005 * r809994;
        double r810007 = r810002 * r810006;
        double r810008 = 1.0;
        double r810009 = r810008 - r809999;
        double r810010 = r810007 / r810009;
        double r810011 = r809997 - r810010;
        double r810012 = 4.5;
        double r810013 = r810011 - r810012;
        return r810013;
}

double f(double v, double w, double r) {
        double r810014 = 3.0;
        double r810015 = 2.0;
        double r810016 = r;
        double r810017 = r810015 / r810016;
        double r810018 = r810017 / r810016;
        double r810019 = r810014 + r810018;
        double r810020 = w;
        double r810021 = r810020 * r810016;
        double r810022 = r810021 * r810021;
        double r810023 = 0.125;
        double r810024 = 1.0;
        double r810025 = v;
        double r810026 = r810024 - r810025;
        double r810027 = r810023 / r810026;
        double r810028 = -2.0;
        double r810029 = fma(r810025, r810028, r810014);
        double r810030 = r810027 * r810029;
        double r810031 = 4.5;
        double r810032 = fma(r810022, r810030, r810031);
        double r810033 = r810019 - r810032;
        return r810033;
}

Error

Bits error versus v

Bits error versus w

Bits error versus r

Derivation

  1. Initial program 12.5

    \[\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(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)}\]
  3. Taylor expanded around 0 0.4

    \[\leadsto \left(3 + \color{blue}{\frac{2}{{r}^{2}}}\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)\]
  4. Simplified0.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)\]
  5. 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 2019135 +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))