x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;z \le -2.0969435282516095 \cdot 10^{215} \lor \neg \left(z \le 1.718372949138872 \cdot 10^{114}\right):\\
\;\;\;\;y \cdot \left(\frac{x}{z} - \frac{t}{z}\right) + t\\
\mathbf{else}:\\
\;\;\;\;x + \frac{\sqrt[3]{y - z} \cdot \sqrt[3]{y - z}}{\sqrt[3]{a - z}} \cdot \left(\frac{\sqrt[3]{y - z}}{\sqrt[3]{1} \cdot \sqrt[3]{a - z}} \cdot \frac{t - x}{\sqrt[3]{a - z}}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r632435 = x;
double r632436 = y;
double r632437 = z;
double r632438 = r632436 - r632437;
double r632439 = t;
double r632440 = r632439 - r632435;
double r632441 = r632438 * r632440;
double r632442 = a;
double r632443 = r632442 - r632437;
double r632444 = r632441 / r632443;
double r632445 = r632435 + r632444;
return r632445;
}
double f(double x, double y, double z, double t, double a) {
double r632446 = z;
double r632447 = -2.0969435282516095e+215;
bool r632448 = r632446 <= r632447;
double r632449 = 1.718372949138872e+114;
bool r632450 = r632446 <= r632449;
double r632451 = !r632450;
bool r632452 = r632448 || r632451;
double r632453 = y;
double r632454 = x;
double r632455 = r632454 / r632446;
double r632456 = t;
double r632457 = r632456 / r632446;
double r632458 = r632455 - r632457;
double r632459 = r632453 * r632458;
double r632460 = r632459 + r632456;
double r632461 = r632453 - r632446;
double r632462 = cbrt(r632461);
double r632463 = r632462 * r632462;
double r632464 = a;
double r632465 = r632464 - r632446;
double r632466 = cbrt(r632465);
double r632467 = r632463 / r632466;
double r632468 = 1.0;
double r632469 = cbrt(r632468);
double r632470 = r632469 * r632466;
double r632471 = r632462 / r632470;
double r632472 = r632456 - r632454;
double r632473 = r632472 / r632466;
double r632474 = r632471 * r632473;
double r632475 = r632467 * r632474;
double r632476 = r632454 + r632475;
double r632477 = r632452 ? r632460 : r632476;
return r632477;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.0 |
|---|---|
| Target | 11.8 |
| Herbie | 10.5 |
if z < -2.0969435282516095e+215 or 1.718372949138872e+114 < z Initial program 46.8
rmApplied add-cube-cbrt47.1
Applied times-frac24.9
rmApplied add-cube-cbrt24.6
Applied times-frac24.6
Applied associate-*l*24.7
Taylor expanded around inf 25.0
Simplified16.8
if -2.0969435282516095e+215 < z < 1.718372949138872e+114Initial program 15.8
rmApplied add-cube-cbrt16.3
Applied times-frac8.6
rmApplied add-cube-cbrt8.6
Applied times-frac8.6
Applied associate-*l*8.3
rmApplied *-un-lft-identity8.3
Applied cbrt-prod8.3
Final simplification10.5
herbie shell --seed 2020049
(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))))