\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}\begin{array}{l}
\mathbf{if}\;a \leq -8.425934768441706 \cdot 10^{-145}:\\
\;\;\;\;\left(x + y\right) - \frac{\frac{z - t}{a - t}}{\frac{1}{y}}\\
\mathbf{elif}\;a \leq 8.442089888717434 \cdot 10^{-134}:\\
\;\;\;\;x + \frac{z}{\frac{t}{y}}\\
\mathbf{else}:\\
\;\;\;\;\left(x + y\right) - \frac{z - t}{\frac{a - t}{y}}\\
\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 (<= a -8.425934768441706e-145)
(- (+ x y) (/ (/ (- z t) (- a t)) (/ 1.0 y)))
(if (<= a 8.442089888717434e-134)
(+ x (/ z (/ t y)))
(- (+ x y) (/ (- z t) (/ (- a t) y))))))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 (a <= -8.425934768441706e-145) {
tmp = (x + y) - (((z - t) / (a - t)) / (1.0 / y));
} else if (a <= 8.442089888717434e-134) {
tmp = x + (z / (t / y));
} else {
tmp = (x + y) - ((z - t) / ((a - t) / y));
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 16.1 |
|---|---|
| Target | 8.6 |
| Herbie | 8.6 |
if a < -8.4259347684417065e-145Initial program 14.6
rmApplied associate-/l*_binary649.0
rmApplied div-inv_binary649.0
Applied associate-/r*_binary648.5
if -8.4259347684417065e-145 < a < 8.44208988871743389e-134Initial program 20.1
rmApplied associate-/l*_binary6418.9
Taylor expanded around inf 9.3
Simplified7.7
if 8.44208988871743389e-134 < a Initial program 14.8
rmApplied associate-/l*_binary649.3
Final simplification8.6
herbie shell --seed 2020220
(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.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))))