\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}\begin{array}{l}
\mathbf{if}\;t \le -1.24704184831236509 \cdot 10^{182}:\\
\;\;\;\;x\\
\mathbf{elif}\;t \le 6.6578301054235618 \cdot 10^{155}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a - t}, t - z, x + y\right)\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r524606 = x;
double r524607 = y;
double r524608 = r524606 + r524607;
double r524609 = z;
double r524610 = t;
double r524611 = r524609 - r524610;
double r524612 = r524611 * r524607;
double r524613 = a;
double r524614 = r524613 - r524610;
double r524615 = r524612 / r524614;
double r524616 = r524608 - r524615;
return r524616;
}
double f(double x, double y, double z, double t, double a) {
double r524617 = t;
double r524618 = -1.2470418483123651e+182;
bool r524619 = r524617 <= r524618;
double r524620 = x;
double r524621 = 6.657830105423562e+155;
bool r524622 = r524617 <= r524621;
double r524623 = y;
double r524624 = a;
double r524625 = r524624 - r524617;
double r524626 = r524623 / r524625;
double r524627 = z;
double r524628 = r524617 - r524627;
double r524629 = r524620 + r524623;
double r524630 = fma(r524626, r524628, r524629);
double r524631 = r524622 ? r524630 : r524620;
double r524632 = r524619 ? r524620 : r524631;
return r524632;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 16.2 |
|---|---|
| Target | 8.5 |
| Herbie | 10.7 |
if t < -1.2470418483123651e+182 or 6.657830105423562e+155 < t Initial program 33.4
Simplified24.9
Taylor expanded around 0 20.3
if -1.2470418483123651e+182 < t < 6.657830105423562e+155Initial program 10.7
Simplified7.6
rmApplied div-inv7.7
rmApplied un-div-inv7.6
Final simplification10.7
herbie shell --seed 2020033 +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-07) (- (+ y x) (* (* (- z t) (/ 1 (- a t))) y)) (if (< (- (+ x y) (/ (* (- z t) y) (- a t))) 1.4754293444577233e-239) (/ (- (* y (- a z)) (* x t)) (- a t)) (- (+ y x) (* (* (- z t) (/ 1 (- a t))) y))))
(- (+ x y) (/ (* (- z t) y) (- a t))))