Average Error: 12.5 → 0.4
Time: 28.4s
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(\left(w \cdot r\right) \cdot \left(w \cdot r\right)\right), \left(\frac{\mathsf{fma}\left(v, -2, 3\right)}{\frac{1 - v}{0.125}}\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(\left(w \cdot r\right) \cdot \left(w \cdot r\right)\right), \left(\frac{\mathsf{fma}\left(v, -2, 3\right)}{\frac{1 - v}{0.125}}\right), 4.5\right)
double f(double v, double w, double r) {
        double r897273 = 3.0;
        double r897274 = 2.0;
        double r897275 = r;
        double r897276 = r897275 * r897275;
        double r897277 = r897274 / r897276;
        double r897278 = r897273 + r897277;
        double r897279 = 0.125;
        double r897280 = v;
        double r897281 = r897274 * r897280;
        double r897282 = r897273 - r897281;
        double r897283 = r897279 * r897282;
        double r897284 = w;
        double r897285 = r897284 * r897284;
        double r897286 = r897285 * r897275;
        double r897287 = r897286 * r897275;
        double r897288 = r897283 * r897287;
        double r897289 = 1.0;
        double r897290 = r897289 - r897280;
        double r897291 = r897288 / r897290;
        double r897292 = r897278 - r897291;
        double r897293 = 4.5;
        double r897294 = r897292 - r897293;
        return r897294;
}

double f(double v, double w, double r) {
        double r897295 = 3.0;
        double r897296 = 2.0;
        double r897297 = r;
        double r897298 = r897296 / r897297;
        double r897299 = r897298 / r897297;
        double r897300 = r897295 + r897299;
        double r897301 = w;
        double r897302 = r897301 * r897297;
        double r897303 = r897302 * r897302;
        double r897304 = v;
        double r897305 = -2.0;
        double r897306 = fma(r897304, r897305, r897295);
        double r897307 = 1.0;
        double r897308 = r897307 - r897304;
        double r897309 = 0.125;
        double r897310 = r897308 / r897309;
        double r897311 = r897306 / r897310;
        double r897312 = 4.5;
        double r897313 = fma(r897303, r897311, r897312);
        double r897314 = r897300 - r897313;
        return r897314;
}

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(\left(w \cdot r\right) \cdot \left(w \cdot r\right)\right), \left(\frac{\mathsf{fma}\left(v, -2, 3\right)}{\frac{1 - v}{0.125}}\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(\left(w \cdot r\right) \cdot \left(w \cdot r\right)\right), \left(\frac{\mathsf{fma}\left(v, -2, 3\right)}{\frac{1 - v}{0.125}}\right), 4.5\right)\]
  4. Simplified0.4

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

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

Reproduce

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