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




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.3 |
|---|---|
| Target | 2.4 |
| Herbie | 1.5 |
if t < -1.1041604840852519e92Initial program 1.4
Taylor expanded around 0 12.1
Simplified1.3
rmApplied div-sub_binary641.3
if -1.1041604840852519e92 < t < 21595849726.2533073Initial program 3.4
Taylor expanded around 0 1.9
if 21595849726.2533073 < t Initial program 1.2
rmApplied add-cube-cbrt_binary641.5
Applied *-un-lft-identity_binary641.5
Applied times-frac_binary641.5
Applied associate-*r*_binary640.9
Simplified0.9
rmApplied *-un-lft-identity_binary640.9
Applied associate-*l*_binary640.9
Simplified1.2
Final simplification1.5
herbie shell --seed 2021204
(FPCore (x y z t)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:tickPosition from plot-0.2.3.4"
:precision binary64
: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))))