Average Error: 13.0 → 0.4
Time: 24.2s
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 \left(3 - v \cdot 2\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 \left(3 - v \cdot 2\right), 4.5\right)
double f(double v, double w, double r) {
        double r1310278 = 3.0;
        double r1310279 = 2.0;
        double r1310280 = r;
        double r1310281 = r1310280 * r1310280;
        double r1310282 = r1310279 / r1310281;
        double r1310283 = r1310278 + r1310282;
        double r1310284 = 0.125;
        double r1310285 = v;
        double r1310286 = r1310279 * r1310285;
        double r1310287 = r1310278 - r1310286;
        double r1310288 = r1310284 * r1310287;
        double r1310289 = w;
        double r1310290 = r1310289 * r1310289;
        double r1310291 = r1310290 * r1310280;
        double r1310292 = r1310291 * r1310280;
        double r1310293 = r1310288 * r1310292;
        double r1310294 = 1.0;
        double r1310295 = r1310294 - r1310285;
        double r1310296 = r1310293 / r1310295;
        double r1310297 = r1310283 - r1310296;
        double r1310298 = 4.5;
        double r1310299 = r1310297 - r1310298;
        return r1310299;
}

double f(double v, double w, double r) {
        double r1310300 = 3.0;
        double r1310301 = 2.0;
        double r1310302 = r;
        double r1310303 = r1310301 / r1310302;
        double r1310304 = r1310303 / r1310302;
        double r1310305 = r1310300 + r1310304;
        double r1310306 = w;
        double r1310307 = r1310306 * r1310302;
        double r1310308 = r1310307 * r1310307;
        double r1310309 = 0.125;
        double r1310310 = 1.0;
        double r1310311 = v;
        double r1310312 = r1310310 - r1310311;
        double r1310313 = r1310309 / r1310312;
        double r1310314 = r1310311 * r1310301;
        double r1310315 = r1310300 - r1310314;
        double r1310316 = r1310313 * r1310315;
        double r1310317 = 4.5;
        double r1310318 = fma(r1310308, r1310316, r1310317);
        double r1310319 = r1310305 - r1310318;
        return r1310319;
}

Error

Bits error versus v

Bits error versus w

Bits error versus r

Derivation

  1. Initial program 13.0

    \[\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 \left(3 - 2 \cdot v\right), 4.5\right)}\]
  3. Using strategy rm
  4. 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 \left(3 - 2 \cdot v\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 \left(3 - v \cdot 2\right), 4.5\right)\]

Reproduce

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