Average Error: 9.1 → 0.1
Time: 13.3s
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 r539366 = x;
        double r539367 = y;
        double r539368 = r539366 / r539367;
        double r539369 = 2.0;
        double r539370 = z;
        double r539371 = r539370 * r539369;
        double r539372 = 1.0;
        double r539373 = t;
        double r539374 = r539372 - r539373;
        double r539375 = r539371 * r539374;
        double r539376 = r539369 + r539375;
        double r539377 = r539373 * r539370;
        double r539378 = r539376 / r539377;
        double r539379 = r539368 + r539378;
        return r539379;
}

double f(double x, double y, double z, double t) {
        double r539380 = 1.0;
        double r539381 = z;
        double r539382 = 1.0;
        double r539383 = fma(r539380, r539381, r539382);
        double r539384 = r539383 / r539381;
        double r539385 = t;
        double r539386 = r539384 / r539385;
        double r539387 = r539386 - r539382;
        double r539388 = 2.0;
        double r539389 = x;
        double r539390 = y;
        double r539391 = r539389 / r539390;
        double r539392 = fma(r539387, r539388, r539391);
        return r539392;
}

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. Simplified0.1

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

    \[\leadsto \mathsf{fma}\left(\color{blue}{\frac{1 \cdot \frac{\mathsf{fma}\left(1, z, 1\right)}{z}}{t}} - 1, 2, \frac{x}{y}\right)\]
  9. 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)\]
  10. 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))))