x + \left(y - x\right) \cdot \frac{z}{t}\begin{array}{l}
\mathbf{if}\;x \le -1877249882.573062:\\
\;\;\;\;x + \frac{z}{t} \cdot \left(y - x\right)\\
\mathbf{elif}\;x \le 2.6855686957563794 \cdot 10^{-288}:\\
\;\;\;\;\frac{\left(y - x\right) \cdot z}{t} + x\\
\mathbf{else}:\\
\;\;\;\;x + \frac{z}{t} \cdot \left(y - x\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r26811787 = x;
double r26811788 = y;
double r26811789 = r26811788 - r26811787;
double r26811790 = z;
double r26811791 = t;
double r26811792 = r26811790 / r26811791;
double r26811793 = r26811789 * r26811792;
double r26811794 = r26811787 + r26811793;
return r26811794;
}
double f(double x, double y, double z, double t) {
double r26811795 = x;
double r26811796 = -1877249882.573062;
bool r26811797 = r26811795 <= r26811796;
double r26811798 = z;
double r26811799 = t;
double r26811800 = r26811798 / r26811799;
double r26811801 = y;
double r26811802 = r26811801 - r26811795;
double r26811803 = r26811800 * r26811802;
double r26811804 = r26811795 + r26811803;
double r26811805 = 2.6855686957563794e-288;
bool r26811806 = r26811795 <= r26811805;
double r26811807 = r26811802 * r26811798;
double r26811808 = r26811807 / r26811799;
double r26811809 = r26811808 + r26811795;
double r26811810 = r26811806 ? r26811809 : r26811804;
double r26811811 = r26811797 ? r26811804 : r26811810;
return r26811811;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.1 |
|---|---|
| Target | 2.3 |
| Herbie | 2.2 |
if x < -1877249882.573062 or 2.6855686957563794e-288 < x Initial program 1.2
if -1877249882.573062 < x < 2.6855686957563794e-288Initial program 4.1
rmApplied associate-*r/4.3
Final simplification2.2
herbie shell --seed 2019158
(FPCore (x y z t)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:tickPosition from plot-0.2.3.4"
:herbie-target
(if (< (* (- y x) (/ z t)) -1013646692435.8867) (+ x (/ (- y x) (/ t z))) (if (< (* (- y x) (/ z t)) -0.0) (+ x (/ (* (- y x) z) t)) (+ x (/ (- y x) (/ t z)))))
(+ x (* (- y x) (/ z t))))