Average Error: 12.7 → 0.4
Time: 23.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\]
\[\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 r1182800 = 3.0;
        double r1182801 = 2.0;
        double r1182802 = r;
        double r1182803 = r1182802 * r1182802;
        double r1182804 = r1182801 / r1182803;
        double r1182805 = r1182800 + r1182804;
        double r1182806 = 0.125;
        double r1182807 = v;
        double r1182808 = r1182801 * r1182807;
        double r1182809 = r1182800 - r1182808;
        double r1182810 = r1182806 * r1182809;
        double r1182811 = w;
        double r1182812 = r1182811 * r1182811;
        double r1182813 = r1182812 * r1182802;
        double r1182814 = r1182813 * r1182802;
        double r1182815 = r1182810 * r1182814;
        double r1182816 = 1.0;
        double r1182817 = r1182816 - r1182807;
        double r1182818 = r1182815 / r1182817;
        double r1182819 = r1182805 - r1182818;
        double r1182820 = 4.5;
        double r1182821 = r1182819 - r1182820;
        return r1182821;
}

double f(double v, double w, double r) {
        double r1182822 = 3.0;
        double r1182823 = 2.0;
        double r1182824 = r;
        double r1182825 = r1182823 / r1182824;
        double r1182826 = r1182825 / r1182824;
        double r1182827 = r1182822 + r1182826;
        double r1182828 = w;
        double r1182829 = r1182828 * r1182824;
        double r1182830 = r1182829 * r1182829;
        double r1182831 = 0.125;
        double r1182832 = 1.0;
        double r1182833 = v;
        double r1182834 = r1182832 - r1182833;
        double r1182835 = r1182831 / r1182834;
        double r1182836 = r1182833 * r1182823;
        double r1182837 = r1182822 - r1182836;
        double r1182838 = r1182835 * r1182837;
        double r1182839 = 4.5;
        double r1182840 = fma(r1182830, r1182838, r1182839);
        double r1182841 = r1182827 - r1182840;
        return r1182841;
}

Error

Bits error versus v

Bits error versus w

Bits error versus r

Derivation

  1. Initial program 12.7

    \[\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 2019172 +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))