\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}
\begin{array}{l}
\mathbf{if}\;t \leq -1.533098449819548 \cdot 10^{+121}:\\
\;\;\;\;\mathsf{fma}\left(z - a, \frac{y}{t}, x\right)\\
\mathbf{elif}\;t \leq 1.5668554075406726 \cdot 10^{+154}:\\
\;\;\;\;y + \left(x + y \cdot \frac{t - z}{a - t}\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, \frac{z - a}{t}, x\right)\\
\end{array}
(FPCore (x y z t a) :precision binary64 (- (+ x y) (/ (* (- z t) y) (- a t))))
(FPCore (x y z t a)
:precision binary64
(if (<= t -1.533098449819548e+121)
(fma (- z a) (/ y t) x)
(if (<= t 1.5668554075406726e+154)
(+ y (+ x (* y (/ (- t z) (- a t)))))
(fma y (/ (- z a) t) x))))double code(double x, double y, double z, double t, double a) {
return (x + y) - (((z - t) * y) / (a - t));
}
double code(double x, double y, double z, double t, double a) {
double tmp;
if (t <= -1.533098449819548e+121) {
tmp = fma((z - a), (y / t), x);
} else if (t <= 1.5668554075406726e+154) {
tmp = y + (x + (y * ((t - z) / (a - t))));
} else {
tmp = fma(y, ((z - a) / t), x);
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 16.5 |
|---|---|
| Target | 8.6 |
| Herbie | 6.6 |
if t < -1.5330984498195481e121Initial program 31.4
Simplified21.5
Taylor expanded in t around inf 13.7
Simplified6.7
Taylor expanded in x around 0 13.7
Simplified6.7
if -1.5330984498195481e121 < t < 1.56685540754067258e154Initial program 9.7
Simplified7.0
Taylor expanded in y around 0 8.5
Simplified7.0
if 1.56685540754067258e154 < t Initial program 31.5
Simplified21.1
Taylor expanded in t around inf 13.5
Simplified5.5
Applied div-inv_binary645.5
Applied associate-*l*_binary644.8
Taylor expanded in x around 0 13.5
Simplified4.8
Final simplification6.6
herbie shell --seed 2022125
(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.0 (- 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.0 (- a t))) y))))
(- (+ x y) (/ (* (- z t) y) (- a t))))