x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;z \le -1.679109833277264845668410827657948004904 \cdot 10^{152} \lor \neg \left(z \le 5.857684699256401932838063215739494797666 \cdot 10^{232}\right):\\
\;\;\;\;t + y \cdot \left(\frac{x}{z} - \frac{t}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \left(\frac{\sqrt[3]{y - z} \cdot \sqrt[3]{y - z}}{\sqrt[3]{a - z}} \cdot \left(\frac{\sqrt[3]{y - z}}{\sqrt[3]{a - z}} \cdot \frac{\sqrt[3]{t - x} \cdot \sqrt[3]{t - x}}{\sqrt[3]{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}}\right)\right) \cdot \frac{\sqrt[3]{t - x}}{\sqrt[3]{\sqrt[3]{a - z}}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r609518 = x;
double r609519 = y;
double r609520 = z;
double r609521 = r609519 - r609520;
double r609522 = t;
double r609523 = r609522 - r609518;
double r609524 = r609521 * r609523;
double r609525 = a;
double r609526 = r609525 - r609520;
double r609527 = r609524 / r609526;
double r609528 = r609518 + r609527;
return r609528;
}
double f(double x, double y, double z, double t, double a) {
double r609529 = z;
double r609530 = -1.6791098332772648e+152;
bool r609531 = r609529 <= r609530;
double r609532 = 5.857684699256402e+232;
bool r609533 = r609529 <= r609532;
double r609534 = !r609533;
bool r609535 = r609531 || r609534;
double r609536 = t;
double r609537 = y;
double r609538 = x;
double r609539 = r609538 / r609529;
double r609540 = r609536 / r609529;
double r609541 = r609539 - r609540;
double r609542 = r609537 * r609541;
double r609543 = r609536 + r609542;
double r609544 = r609537 - r609529;
double r609545 = cbrt(r609544);
double r609546 = r609545 * r609545;
double r609547 = a;
double r609548 = r609547 - r609529;
double r609549 = cbrt(r609548);
double r609550 = r609546 / r609549;
double r609551 = r609545 / r609549;
double r609552 = r609536 - r609538;
double r609553 = cbrt(r609552);
double r609554 = r609553 * r609553;
double r609555 = r609549 * r609549;
double r609556 = cbrt(r609555);
double r609557 = r609554 / r609556;
double r609558 = r609551 * r609557;
double r609559 = r609550 * r609558;
double r609560 = cbrt(r609549);
double r609561 = r609553 / r609560;
double r609562 = r609559 * r609561;
double r609563 = r609538 + r609562;
double r609564 = r609535 ? r609543 : r609563;
return r609564;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 25.3 |
|---|---|
| Target | 11.7 |
| Herbie | 10.1 |
if z < -1.6791098332772648e+152 or 5.857684699256402e+232 < z Initial program 49.9
rmApplied add-cube-cbrt50.2
Applied times-frac24.6
rmApplied add-cube-cbrt24.6
Applied cbrt-prod24.6
Applied add-cube-cbrt24.8
Applied times-frac24.8
Applied associate-*r*24.3
rmApplied add-cube-cbrt24.2
Applied times-frac24.2
Applied associate-*l*24.2
Taylor expanded around inf 24.9
Simplified14.6
if -1.6791098332772648e+152 < z < 5.857684699256402e+232Initial program 18.5
rmApplied add-cube-cbrt19.0
Applied times-frac9.6
rmApplied add-cube-cbrt9.6
Applied cbrt-prod9.7
Applied add-cube-cbrt9.8
Applied times-frac9.8
Applied associate-*r*9.2
rmApplied add-cube-cbrt9.2
Applied times-frac9.2
Applied associate-*l*8.8
Final simplification10.1
herbie shell --seed 2019353
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:invLinMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< z -1.2536131056095036e+188) (- t (* (/ y z) (- t x))) (if (< z 4.446702369113811e+64) (+ x (/ (- y z) (/ (- a z) (- t x)))) (- t (* (/ y z) (- t x)))))
(+ x (/ (* (- y z) (- t x)) (- a z))))