Average Error: 12.1 → 0.4
Time: 1.2m
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) - (\left(\frac{(v \cdot -2 + 3)_*}{\frac{1 - v}{0.125}}\right) \cdot \left(\left(r \cdot w\right) \cdot \left(r \cdot w\right)\right) + 4.5)_*\]
\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) - (\left(\frac{(v \cdot -2 + 3)_*}{\frac{1 - v}{0.125}}\right) \cdot \left(\left(r \cdot w\right) \cdot \left(r \cdot w\right)\right) + 4.5)_*
double f(double v, double w, double r) {
        double r4416812 = 3.0;
        double r4416813 = 2.0;
        double r4416814 = r;
        double r4416815 = r4416814 * r4416814;
        double r4416816 = r4416813 / r4416815;
        double r4416817 = r4416812 + r4416816;
        double r4416818 = 0.125;
        double r4416819 = v;
        double r4416820 = r4416813 * r4416819;
        double r4416821 = r4416812 - r4416820;
        double r4416822 = r4416818 * r4416821;
        double r4416823 = w;
        double r4416824 = r4416823 * r4416823;
        double r4416825 = r4416824 * r4416814;
        double r4416826 = r4416825 * r4416814;
        double r4416827 = r4416822 * r4416826;
        double r4416828 = 1.0;
        double r4416829 = r4416828 - r4416819;
        double r4416830 = r4416827 / r4416829;
        double r4416831 = r4416817 - r4416830;
        double r4416832 = 4.5;
        double r4416833 = r4416831 - r4416832;
        return r4416833;
}

double f(double v, double w, double r) {
        double r4416834 = 3.0;
        double r4416835 = 2.0;
        double r4416836 = r;
        double r4416837 = r4416835 / r4416836;
        double r4416838 = r4416837 / r4416836;
        double r4416839 = r4416834 + r4416838;
        double r4416840 = v;
        double r4416841 = -2.0;
        double r4416842 = fma(r4416840, r4416841, r4416834);
        double r4416843 = 1.0;
        double r4416844 = r4416843 - r4416840;
        double r4416845 = 0.125;
        double r4416846 = r4416844 / r4416845;
        double r4416847 = r4416842 / r4416846;
        double r4416848 = w;
        double r4416849 = r4416836 * r4416848;
        double r4416850 = r4416849 * r4416849;
        double r4416851 = 4.5;
        double r4416852 = fma(r4416847, r4416850, r4416851);
        double r4416853 = r4416839 - r4416852;
        return r4416853;
}

Error

Bits error versus v

Bits error versus w

Bits error versus r

Derivation

  1. Initial program 12.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. Simplified0.4

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

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

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

Reproduce

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