Average Error: 9.1 → 0.1
Time: 14.1s
Precision: 64
\[\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\]
\[\mathsf{fma}\left(\frac{\frac{\mathsf{fma}\left(1, z, 1\right)}{z}}{t} - 1, 2, \frac{x}{y}\right)\]
\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}
\mathsf{fma}\left(\frac{\frac{\mathsf{fma}\left(1, z, 1\right)}{z}}{t} - 1, 2, \frac{x}{y}\right)
double f(double x, double y, double z, double t) {
        double r35814901 = x;
        double r35814902 = y;
        double r35814903 = r35814901 / r35814902;
        double r35814904 = 2.0;
        double r35814905 = z;
        double r35814906 = r35814905 * r35814904;
        double r35814907 = 1.0;
        double r35814908 = t;
        double r35814909 = r35814907 - r35814908;
        double r35814910 = r35814906 * r35814909;
        double r35814911 = r35814904 + r35814910;
        double r35814912 = r35814908 * r35814905;
        double r35814913 = r35814911 / r35814912;
        double r35814914 = r35814903 + r35814913;
        return r35814914;
}

double f(double x, double y, double z, double t) {
        double r35814915 = 1.0;
        double r35814916 = z;
        double r35814917 = 1.0;
        double r35814918 = fma(r35814915, r35814916, r35814917);
        double r35814919 = r35814918 / r35814916;
        double r35814920 = t;
        double r35814921 = r35814919 / r35814920;
        double r35814922 = r35814921 - r35814917;
        double r35814923 = 2.0;
        double r35814924 = x;
        double r35814925 = y;
        double r35814926 = r35814924 / r35814925;
        double r35814927 = fma(r35814922, r35814923, r35814926);
        return r35814927;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original9.1
Target0.1
Herbie0.1
\[\frac{\frac{2}{z} + 2}{t} - \left(2 - \frac{x}{y}\right)\]

Derivation

  1. Initial program 9.1

    \[\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\]
  2. Simplified0.1

    \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{\mathsf{fma}\left(z, 1, 1\right)}{t \cdot z} - 1, 2, \frac{x}{y}\right)}\]
  3. Using strategy rm
  4. Applied *-un-lft-identity0.1

    \[\leadsto \mathsf{fma}\left(\frac{\color{blue}{1 \cdot \mathsf{fma}\left(z, 1, 1\right)}}{t \cdot z} - 1, 2, \frac{x}{y}\right)\]
  5. Applied times-frac0.1

    \[\leadsto \mathsf{fma}\left(\color{blue}{\frac{1}{t} \cdot \frac{\mathsf{fma}\left(z, 1, 1\right)}{z}} - 1, 2, \frac{x}{y}\right)\]
  6. Using strategy rm
  7. Applied associate-*l/0.1

    \[\leadsto \mathsf{fma}\left(\color{blue}{\frac{1 \cdot \frac{\mathsf{fma}\left(z, 1, 1\right)}{z}}{t}} - 1, 2, \frac{x}{y}\right)\]
  8. Simplified0.1

    \[\leadsto \mathsf{fma}\left(\frac{\color{blue}{\frac{\mathsf{fma}\left(1, z, 1\right)}{z}}}{t} - 1, 2, \frac{x}{y}\right)\]
  9. Final simplification0.1

    \[\leadsto \mathsf{fma}\left(\frac{\frac{\mathsf{fma}\left(1, z, 1\right)}{z}}{t} - 1, 2, \frac{x}{y}\right)\]

Reproduce

herbie shell --seed 2019179 +o rules:numerics
(FPCore (x y z t)
  :name "Data.HashTable.ST.Basic:computeOverhead from hashtables-1.2.0.2"

  :herbie-target
  (- (/ (+ (/ 2.0 z) 2.0) t) (- 2.0 (/ x y)))

  (+ (/ x y) (/ (+ 2.0 (* (* z 2.0) (- 1.0 t))) (* t z))))