\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}\begin{array}{l}
\mathbf{if}\;\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} = -\infty:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x\right)\\
\mathbf{elif}\;\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} \le -1.27428560485694024858281410154626983398 \cdot 10^{-217}:\\
\;\;\;\;\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}\\
\mathbf{elif}\;\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} \le 0.0:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\left(t - z\right) \cdot \frac{1}{a - t}, y, x + y\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r442988 = x;
double r442989 = y;
double r442990 = r442988 + r442989;
double r442991 = z;
double r442992 = t;
double r442993 = r442991 - r442992;
double r442994 = r442993 * r442989;
double r442995 = a;
double r442996 = r442995 - r442992;
double r442997 = r442994 / r442996;
double r442998 = r442990 - r442997;
return r442998;
}
double f(double x, double y, double z, double t, double a) {
double r442999 = x;
double r443000 = y;
double r443001 = r442999 + r443000;
double r443002 = z;
double r443003 = t;
double r443004 = r443002 - r443003;
double r443005 = r443004 * r443000;
double r443006 = a;
double r443007 = r443006 - r443003;
double r443008 = r443005 / r443007;
double r443009 = r443001 - r443008;
double r443010 = -inf.0;
bool r443011 = r443009 <= r443010;
double r443012 = r443002 / r443003;
double r443013 = fma(r443012, r443000, r442999);
double r443014 = -1.2742856048569402e-217;
bool r443015 = r443009 <= r443014;
double r443016 = 0.0;
bool r443017 = r443009 <= r443016;
double r443018 = r443003 - r443002;
double r443019 = 1.0;
double r443020 = r443019 / r443007;
double r443021 = r443018 * r443020;
double r443022 = fma(r443021, r443000, r443001);
double r443023 = r443017 ? r443013 : r443022;
double r443024 = r443015 ? r443009 : r443023;
double r443025 = r443011 ? r443013 : r443024;
return r443025;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 17.0 |
|---|---|
| Target | 8.3 |
| Herbie | 8.2 |
if (- (+ x y) (/ (* (- z t) y) (- a t))) < -inf.0 or -1.2742856048569402e-217 < (- (+ x y) (/ (* (- z t) y) (- a t))) < 0.0Initial program 59.7
Simplified42.5
Taylor expanded around inf 29.5
Simplified24.1
if -inf.0 < (- (+ x y) (/ (* (- z t) y) (- a t))) < -1.2742856048569402e-217Initial program 1.5
if 0.0 < (- (+ x y) (/ (* (- z t) y) (- a t))) Initial program 12.2
Simplified7.2
rmApplied div-inv7.2
Final simplification8.2
herbie shell --seed 2019212 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTick from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(if (< (- (+ x y) (/ (* (- z t) y) (- a t))) -1.3664970889390727e-7) (- (+ y x) (* (* (- z t) (/ 1 (- a t))) y)) (if (< (- (+ x y) (/ (* (- z t) y) (- a t))) 1.47542934445772333e-239) (/ (- (* y (- a z)) (* x t)) (- a t)) (- (+ y x) (* (* (- z t) (/ 1 (- a t))) y))))
(- (+ x y) (/ (* (- z t) y) (- a t))))