Average Error: 12.2 → 0.4
Time: 29.5s
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\]
\[\frac{\frac{2}{r}}{r} - \left(\mathsf{fma}\left(\mathsf{fma}\left(-2, v, 3\right) \cdot \frac{0.125}{1 - v}, \left(r \cdot w\right) \cdot \left(r \cdot w\right), 4.5\right) - 3\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
\frac{\frac{2}{r}}{r} - \left(\mathsf{fma}\left(\mathsf{fma}\left(-2, v, 3\right) \cdot \frac{0.125}{1 - v}, \left(r \cdot w\right) \cdot \left(r \cdot w\right), 4.5\right) - 3\right)
double f(double v, double w, double r) {
        double r868023 = 3.0;
        double r868024 = 2.0;
        double r868025 = r;
        double r868026 = r868025 * r868025;
        double r868027 = r868024 / r868026;
        double r868028 = r868023 + r868027;
        double r868029 = 0.125;
        double r868030 = v;
        double r868031 = r868024 * r868030;
        double r868032 = r868023 - r868031;
        double r868033 = r868029 * r868032;
        double r868034 = w;
        double r868035 = r868034 * r868034;
        double r868036 = r868035 * r868025;
        double r868037 = r868036 * r868025;
        double r868038 = r868033 * r868037;
        double r868039 = 1.0;
        double r868040 = r868039 - r868030;
        double r868041 = r868038 / r868040;
        double r868042 = r868028 - r868041;
        double r868043 = 4.5;
        double r868044 = r868042 - r868043;
        return r868044;
}

double f(double v, double w, double r) {
        double r868045 = 2.0;
        double r868046 = r;
        double r868047 = r868045 / r868046;
        double r868048 = r868047 / r868046;
        double r868049 = -2.0;
        double r868050 = v;
        double r868051 = 3.0;
        double r868052 = fma(r868049, r868050, r868051);
        double r868053 = 0.125;
        double r868054 = 1.0;
        double r868055 = r868054 - r868050;
        double r868056 = r868053 / r868055;
        double r868057 = r868052 * r868056;
        double r868058 = w;
        double r868059 = r868046 * r868058;
        double r868060 = r868059 * r868059;
        double r868061 = 4.5;
        double r868062 = fma(r868057, r868060, r868061);
        double r868063 = r868062 - r868051;
        double r868064 = r868048 - r868063;
        return r868064;
}

Error

Bits error versus v

Bits error versus w

Bits error versus r

Derivation

  1. Initial program 12.2

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

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

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

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

Reproduce

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