x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;t \le -5.36070110252963308 \cdot 10^{191} \lor \neg \left(t \le 2.05294572640722941 \cdot 10^{202}\right):\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{\sqrt[3]{y - x}}{\frac{\sqrt[3]{a - t} \cdot \sqrt[3]{a - t}}{\sqrt[3]{y - x}}} \cdot \frac{\sqrt[3]{y - x}}{\frac{\sqrt[3]{a - t}}{z - t}}\\
\end{array}double code(double x, double y, double z, double t, double a) {
return ((double) (x + ((double) (((double) (((double) (y - x)) * ((double) (z - t)))) / ((double) (a - t))))));
}
double code(double x, double y, double z, double t, double a) {
double VAR;
if (((t <= -5.360701102529633e+191) || !(t <= 2.0529457264072294e+202))) {
VAR = ((double) (((double) (y + ((double) (((double) (x * z)) / t)))) - ((double) (((double) (z * y)) / t))));
} else {
VAR = ((double) (x + ((double) (((double) (((double) cbrt(((double) (y - x)))) / ((double) (((double) (((double) cbrt(((double) (a - t)))) * ((double) cbrt(((double) (a - t)))))) / ((double) cbrt(((double) (y - x)))))))) * ((double) (((double) cbrt(((double) (y - x)))) / ((double) (((double) cbrt(((double) (a - t)))) / ((double) (z - t))))))))));
}
return VAR;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.5 |
|---|---|
| Target | 9.5 |
| Herbie | 11.9 |
if t < -5.36070110252963308e191 or 2.05294572640722941e202 < t Initial program 49.9
Taylor expanded around inf 24.0
if -5.36070110252963308e191 < t < 2.05294572640722941e202Initial program 17.8
rmApplied associate-/l*8.3
rmApplied *-un-lft-identity8.3
Applied add-cube-cbrt8.9
Applied times-frac8.9
Applied add-cube-cbrt9.0
Applied times-frac8.7
Simplified8.7
Final simplification11.9
herbie shell --seed 2020149
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))