x + \left(y - x\right) \cdot \frac{z}{t}
\begin{array}{l}
\mathbf{if}\;t \leq -2.5268772841685277 \cdot 10^{-157} \lor \neg \left(t \leq 2.3295563362690378 \cdot 10^{-58}\right):\\
\;\;\;\;\mathsf{fma}\left(y - x, \frac{z}{t}, x\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\
\end{array}
(FPCore (x y z t) :precision binary64 (+ x (* (- y x) (/ z t))))
(FPCore (x y z t) :precision binary64 (if (or (<= t -2.5268772841685277e-157) (not (<= t 2.3295563362690378e-58))) (fma (- y x) (/ z t) x) (+ 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 <= -2.5268772841685277e-157) || !(t <= 2.3295563362690378e-58)) {
tmp = fma((y - x), (z / t), x);
} 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
| Original | 2.0 |
|---|---|
| Target | 2.2 |
| Herbie | 1.5 |
if t < -2.52687728416852767e-157 or 2.3295563362690378e-58 < t Initial program 1.1
Simplified1.1
if -2.52687728416852767e-157 < t < 2.3295563362690378e-58Initial program 5.1
Simplified5.1
Taylor expanded in y around 0 2.8
Applied add-cube-cbrt_binary643.1
Applied add-cube-cbrt_binary643.8
Applied prod-diff_binary643.8
Simplified2.7
Simplified2.7
Final simplification1.5
herbie shell --seed 2022068
(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))))