Average Error: 9.4 → 0.1
Time: 15.9s
Precision: 64
\[\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\]
\[\mathsf{fma}\left(\left(\frac{1}{t} + \frac{\frac{1}{z}}{t}\right) - 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(\left(\frac{1}{t} + \frac{\frac{1}{z}}{t}\right) - 1, 2, \frac{x}{y}\right)
double f(double x, double y, double z, double t) {
        double r791522 = x;
        double r791523 = y;
        double r791524 = r791522 / r791523;
        double r791525 = 2.0;
        double r791526 = z;
        double r791527 = r791526 * r791525;
        double r791528 = 1.0;
        double r791529 = t;
        double r791530 = r791528 - r791529;
        double r791531 = r791527 * r791530;
        double r791532 = r791525 + r791531;
        double r791533 = r791529 * r791526;
        double r791534 = r791532 / r791533;
        double r791535 = r791524 + r791534;
        return r791535;
}

double f(double x, double y, double z, double t) {
        double r791536 = 1.0;
        double r791537 = t;
        double r791538 = r791536 / r791537;
        double r791539 = 1.0;
        double r791540 = z;
        double r791541 = r791539 / r791540;
        double r791542 = r791541 / r791537;
        double r791543 = r791538 + r791542;
        double r791544 = r791543 - r791539;
        double r791545 = 2.0;
        double r791546 = x;
        double r791547 = y;
        double r791548 = r791546 / r791547;
        double r791549 = fma(r791544, r791545, r791548);
        return r791549;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

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

Derivation

  1. Initial program 9.4

    \[\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. Taylor expanded around 0 0.1

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

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

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

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

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

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

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

Reproduce

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