Average Error: 12.9 → 0.4
Time: 24.1s
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 - \mathsf{fma}\left(\frac{0.125}{\frac{1}{r \cdot w} \cdot \frac{1 - v}{r \cdot w}}, 3 - v \cdot 2, 4.5\right)\right) + \frac{\frac{2}{r}}{r}\]
\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 - \mathsf{fma}\left(\frac{0.125}{\frac{1}{r \cdot w} \cdot \frac{1 - v}{r \cdot w}}, 3 - v \cdot 2, 4.5\right)\right) + \frac{\frac{2}{r}}{r}
double f(double v, double w, double r) {
        double r1418191 = 3.0;
        double r1418192 = 2.0;
        double r1418193 = r;
        double r1418194 = r1418193 * r1418193;
        double r1418195 = r1418192 / r1418194;
        double r1418196 = r1418191 + r1418195;
        double r1418197 = 0.125;
        double r1418198 = v;
        double r1418199 = r1418192 * r1418198;
        double r1418200 = r1418191 - r1418199;
        double r1418201 = r1418197 * r1418200;
        double r1418202 = w;
        double r1418203 = r1418202 * r1418202;
        double r1418204 = r1418203 * r1418193;
        double r1418205 = r1418204 * r1418193;
        double r1418206 = r1418201 * r1418205;
        double r1418207 = 1.0;
        double r1418208 = r1418207 - r1418198;
        double r1418209 = r1418206 / r1418208;
        double r1418210 = r1418196 - r1418209;
        double r1418211 = 4.5;
        double r1418212 = r1418210 - r1418211;
        return r1418212;
}

double f(double v, double w, double r) {
        double r1418213 = 3.0;
        double r1418214 = 0.125;
        double r1418215 = 1.0;
        double r1418216 = r;
        double r1418217 = w;
        double r1418218 = r1418216 * r1418217;
        double r1418219 = r1418215 / r1418218;
        double r1418220 = 1.0;
        double r1418221 = v;
        double r1418222 = r1418220 - r1418221;
        double r1418223 = r1418222 / r1418218;
        double r1418224 = r1418219 * r1418223;
        double r1418225 = r1418214 / r1418224;
        double r1418226 = 2.0;
        double r1418227 = r1418221 * r1418226;
        double r1418228 = r1418213 - r1418227;
        double r1418229 = 4.5;
        double r1418230 = fma(r1418225, r1418228, r1418229);
        double r1418231 = r1418213 - r1418230;
        double r1418232 = r1418226 / r1418216;
        double r1418233 = r1418232 / r1418216;
        double r1418234 = r1418231 + r1418233;
        return r1418234;
}

Error

Bits error versus v

Bits error versus w

Bits error versus r

Derivation

  1. Initial program 12.9

    \[\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}{\frac{2}{r \cdot r} + \left(3 - \mathsf{fma}\left(\frac{0.125}{\frac{1 - v}{\left(w \cdot r\right) \cdot \left(w \cdot r\right)}}, 3 - 2 \cdot v, 4.5\right)\right)}\]
  3. Using strategy rm
  4. Applied associate-/r*0.4

    \[\leadsto \color{blue}{\frac{\frac{2}{r}}{r}} + \left(3 - \mathsf{fma}\left(\frac{0.125}{\frac{1 - v}{\left(w \cdot r\right) \cdot \left(w \cdot r\right)}}, 3 - 2 \cdot v, 4.5\right)\right)\]
  5. Using strategy rm
  6. Applied *-un-lft-identity0.4

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

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

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

Reproduce

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