Average Error: 13.1 → 0.4
Time: 20.6s
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(2 \cdot {r}^{-2} + 3\right) - \mathsf{fma}\left(\left(w \cdot r\right) \cdot \left(w \cdot r\right), \mathsf{expm1}\left(\mathsf{log1p}\left(\frac{0.125 \cdot \mathsf{fma}\left(v, -2, 3\right)}{1 - v}\right)\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(2 \cdot {r}^{-2} + 3\right) - \mathsf{fma}\left(\left(w \cdot r\right) \cdot \left(w \cdot r\right), \mathsf{expm1}\left(\mathsf{log1p}\left(\frac{0.125 \cdot \mathsf{fma}\left(v, -2, 3\right)}{1 - v}\right)\right), 4.5\right)
double f(double v, double w, double r) {
        double r28188 = 3.0;
        double r28189 = 2.0;
        double r28190 = r;
        double r28191 = r28190 * r28190;
        double r28192 = r28189 / r28191;
        double r28193 = r28188 + r28192;
        double r28194 = 0.125;
        double r28195 = v;
        double r28196 = r28189 * r28195;
        double r28197 = r28188 - r28196;
        double r28198 = r28194 * r28197;
        double r28199 = w;
        double r28200 = r28199 * r28199;
        double r28201 = r28200 * r28190;
        double r28202 = r28201 * r28190;
        double r28203 = r28198 * r28202;
        double r28204 = 1.0;
        double r28205 = r28204 - r28195;
        double r28206 = r28203 / r28205;
        double r28207 = r28193 - r28206;
        double r28208 = 4.5;
        double r28209 = r28207 - r28208;
        return r28209;
}

double f(double v, double w, double r) {
        double r28210 = 2.0;
        double r28211 = r;
        double r28212 = -2.0;
        double r28213 = pow(r28211, r28212);
        double r28214 = r28210 * r28213;
        double r28215 = 3.0;
        double r28216 = r28214 + r28215;
        double r28217 = w;
        double r28218 = r28217 * r28211;
        double r28219 = r28218 * r28218;
        double r28220 = 0.125;
        double r28221 = v;
        double r28222 = -r28210;
        double r28223 = fma(r28221, r28222, r28215);
        double r28224 = r28220 * r28223;
        double r28225 = 1.0;
        double r28226 = r28225 - r28221;
        double r28227 = r28224 / r28226;
        double r28228 = log1p(r28227);
        double r28229 = expm1(r28228);
        double r28230 = 4.5;
        double r28231 = fma(r28219, r28229, r28230);
        double r28232 = r28216 - r28231;
        return r28232;
}

Error

Bits error versus v

Bits error versus w

Bits error versus r

Derivation

  1. Initial program 13.1

    \[\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. Simplified13.4

    \[\leadsto \color{blue}{\left(3 + \frac{2}{r \cdot r}\right) - \mathsf{fma}\left(w \cdot \left(\left(r \cdot r\right) \cdot w\right), \frac{0.125}{1 - v} \cdot \mathsf{fma}\left(v, -2, 3\right), 4.5\right)}\]
  3. Taylor expanded around 0 17.7

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

    \[\leadsto \left(3 + \frac{2}{r \cdot r}\right) - \mathsf{fma}\left(\color{blue}{\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. Using strategy rm
  6. Applied div-inv0.4

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

    \[\leadsto \left(3 + 2 \cdot \color{blue}{\frac{\frac{1}{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)\]
  8. Using strategy rm
  9. Applied pow10.4

    \[\leadsto \left(3 + 2 \cdot \frac{\frac{1}{r}}{\color{blue}{{r}^{1}}}\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)\]
  10. Applied inv-pow0.4

    \[\leadsto \left(3 + 2 \cdot \frac{\color{blue}{{r}^{-1}}}{{r}^{1}}\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)\]
  11. Applied pow-div0.3

    \[\leadsto \left(3 + 2 \cdot \color{blue}{{r}^{\left(-1 - 1\right)}}\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)\]
  12. Simplified0.3

    \[\leadsto \left(3 + 2 \cdot {r}^{\color{blue}{-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)\]
  13. Using strategy rm
  14. Applied expm1-log1p-u0.4

    \[\leadsto \left(3 + 2 \cdot {r}^{-2}\right) - \mathsf{fma}\left(\left(w \cdot r\right) \cdot \left(w \cdot r\right), \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{0.125}{1 - v} \cdot \mathsf{fma}\left(v, -2, 3\right)\right)\right)}, 4.5\right)\]
  15. Simplified0.4

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

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

Reproduce

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