x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;a \le -7.943644488630814077813993760926733416479 \cdot 10^{-127}:\\
\;\;\;\;x + \left(\left(\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}} \cdot \left(\sqrt[3]{t - x} \cdot \sqrt[3]{t - x}\right)\right) \cdot \frac{1}{\sqrt[3]{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}}\right) \cdot \frac{\sqrt[3]{t - x}}{\sqrt[3]{\sqrt[3]{a - z}}}\\
\mathbf{elif}\;a \le 1.256764066685756904154398536886782773552 \cdot 10^{-108}:\\
\;\;\;\;\left(\frac{x \cdot y}{z} + t\right) - \frac{t \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y - z}{\sqrt[3]{a - z} \cdot \left(\sqrt[3]{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}} \cdot \sqrt[3]{\sqrt[3]{a - z}}\right)} \cdot \frac{t - x}{\sqrt[3]{a - z}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r660460 = x;
double r660461 = y;
double r660462 = z;
double r660463 = r660461 - r660462;
double r660464 = t;
double r660465 = r660464 - r660460;
double r660466 = r660463 * r660465;
double r660467 = a;
double r660468 = r660467 - r660462;
double r660469 = r660466 / r660468;
double r660470 = r660460 + r660469;
return r660470;
}
double f(double x, double y, double z, double t, double a) {
double r660471 = a;
double r660472 = -7.943644488630814e-127;
bool r660473 = r660471 <= r660472;
double r660474 = x;
double r660475 = y;
double r660476 = z;
double r660477 = r660475 - r660476;
double r660478 = r660471 - r660476;
double r660479 = cbrt(r660478);
double r660480 = r660479 * r660479;
double r660481 = r660477 / r660480;
double r660482 = t;
double r660483 = r660482 - r660474;
double r660484 = cbrt(r660483);
double r660485 = r660484 * r660484;
double r660486 = r660481 * r660485;
double r660487 = 1.0;
double r660488 = cbrt(r660480);
double r660489 = r660487 / r660488;
double r660490 = r660486 * r660489;
double r660491 = cbrt(r660479);
double r660492 = r660484 / r660491;
double r660493 = r660490 * r660492;
double r660494 = r660474 + r660493;
double r660495 = 1.2567640666857569e-108;
bool r660496 = r660471 <= r660495;
double r660497 = r660474 * r660475;
double r660498 = r660497 / r660476;
double r660499 = r660498 + r660482;
double r660500 = r660482 * r660475;
double r660501 = r660500 / r660476;
double r660502 = r660499 - r660501;
double r660503 = r660488 * r660491;
double r660504 = r660479 * r660503;
double r660505 = r660477 / r660504;
double r660506 = r660483 / r660479;
double r660507 = r660505 * r660506;
double r660508 = r660474 + r660507;
double r660509 = r660496 ? r660502 : r660508;
double r660510 = r660473 ? r660494 : r660509;
return r660510;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.4 |
|---|---|
| Target | 11.9 |
| Herbie | 11.0 |
if a < -7.943644488630814e-127Initial program 23.5
rmApplied add-cube-cbrt23.9
Applied times-frac9.8
rmApplied add-cube-cbrt9.8
Applied cbrt-prod9.8
Applied add-cube-cbrt10.0
Applied times-frac10.0
Applied associate-*r*9.5
rmApplied div-inv9.5
Applied associate-*r*9.5
if -7.943644488630814e-127 < a < 1.2567640666857569e-108Initial program 27.4
Taylor expanded around inf 14.7
if 1.2567640666857569e-108 < a Initial program 23.0
rmApplied add-cube-cbrt23.3
Applied times-frac9.8
rmApplied add-cube-cbrt9.8
Applied cbrt-prod9.8
Final simplification11.0
herbie shell --seed 2020001
(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))))