x + \left(y - x\right) \cdot \frac{z}{t}\begin{array}{l}
\mathbf{if}\;z \leq -6.782228991255126 \cdot 10^{+59}:\\
\;\;\;\;x + \frac{y - x}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{z}{\sqrt[3]{t}}\\
\mathbf{elif}\;z \leq 8.347533906232645 \cdot 10^{+26}:\\
\;\;\;\;x + \frac{z \cdot \left(y - x\right)}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \left(\left(y - x\right) \cdot \frac{\sqrt{z}}{\sqrt[3]{t} \cdot \sqrt[3]{t}}\right) \cdot \frac{\sqrt{z}}{\sqrt[3]{t}}\\
\end{array}(FPCore (x y z t) :precision binary64 (+ x (* (- y x) (/ z t))))
(FPCore (x y z t)
:precision binary64
(if (<= z -6.782228991255126e+59)
(+ x (* (/ (- y x) (* (cbrt t) (cbrt t))) (/ z (cbrt t))))
(if (<= z 8.347533906232645e+26)
(+ x (/ (* z (- y x)) t))
(+
x
(*
(* (- y x) (/ (sqrt z) (* (cbrt t) (cbrt t))))
(/ (sqrt z) (cbrt 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 (z <= -6.782228991255126e+59) {
tmp = x + (((y - x) / (cbrt(t) * cbrt(t))) * (z / cbrt(t)));
} else if (z <= 8.347533906232645e+26) {
tmp = x + ((z * (y - x)) / t);
} else {
tmp = x + (((y - x) * (sqrt(z) / (cbrt(t) * cbrt(t)))) * (sqrt(z) / cbrt(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 z < -6.782228991255126e59Initial program 5.3
rmApplied add-cube-cbrt_binary64_137536.0
Applied *-un-lft-identity_binary64_137186.0
Applied times-frac_binary64_137246.0
Applied associate-*r*_binary64_136582.7
Simplified2.7
if -6.782228991255126e59 < z < 8.34753390623264508e26Initial program 1.2
Taylor expanded around 0 1.4
if 8.34753390623264508e26 < z Initial program 4.4
rmApplied add-cube-cbrt_binary64_137535.1
Applied add-sqr-sqrt_binary64_137405.1
Applied times-frac_binary64_137245.1
Applied associate-*r*_binary64_136581.1
Final simplification1.5
herbie shell --seed 2021043
(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))))