x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;a \le -2.384298577098446946206942739732313054781 \cdot 10^{-114} \lor \neg \left(a \le 1.079346633002464646210311802463085357102 \cdot 10^{-104}\right):\\
\;\;\;\;\left(\frac{y - z}{a - z} \cdot \left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right)\right) \cdot \left(\left(\sqrt[3]{\sqrt[3]{t}} \cdot \sqrt[3]{\sqrt[3]{t}}\right) \cdot \sqrt[3]{\sqrt[3]{t}}\right) + \mathsf{fma}\left(\frac{y - z}{a - z}, -x, x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{y - z}{a - z} \cdot t + \frac{x \cdot y}{z}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r393389 = x;
double r393390 = y;
double r393391 = z;
double r393392 = r393390 - r393391;
double r393393 = t;
double r393394 = r393393 - r393389;
double r393395 = r393392 * r393394;
double r393396 = a;
double r393397 = r393396 - r393391;
double r393398 = r393395 / r393397;
double r393399 = r393389 + r393398;
return r393399;
}
double f(double x, double y, double z, double t, double a) {
double r393400 = a;
double r393401 = -2.384298577098447e-114;
bool r393402 = r393400 <= r393401;
double r393403 = 1.0793466330024646e-104;
bool r393404 = r393400 <= r393403;
double r393405 = !r393404;
bool r393406 = r393402 || r393405;
double r393407 = y;
double r393408 = z;
double r393409 = r393407 - r393408;
double r393410 = r393400 - r393408;
double r393411 = r393409 / r393410;
double r393412 = t;
double r393413 = cbrt(r393412);
double r393414 = r393413 * r393413;
double r393415 = r393411 * r393414;
double r393416 = cbrt(r393413);
double r393417 = r393416 * r393416;
double r393418 = r393417 * r393416;
double r393419 = r393415 * r393418;
double r393420 = x;
double r393421 = -r393420;
double r393422 = fma(r393411, r393421, r393420);
double r393423 = r393419 + r393422;
double r393424 = r393411 * r393412;
double r393425 = r393420 * r393407;
double r393426 = r393425 / r393408;
double r393427 = r393424 + r393426;
double r393428 = r393406 ? r393423 : r393427;
return r393428;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.3 |
|---|---|
| Target | 12.1 |
| Herbie | 8.3 |
if a < -2.384298577098447e-114 or 1.0793466330024646e-104 < a Initial program 22.3
Simplified8.8
rmApplied fma-udef8.8
rmApplied sub-neg8.8
Applied distribute-lft-in8.8
Applied associate-+l+6.3
Simplified6.3
rmApplied add-cube-cbrt6.8
Applied associate-*r*6.8
rmApplied add-cube-cbrt7.0
if -2.384298577098447e-114 < a < 1.0793466330024646e-104Initial program 29.3
Simplified19.3
rmApplied fma-udef19.3
rmApplied sub-neg19.3
Applied distribute-lft-in19.3
Applied associate-+l+11.4
Simplified11.4
Taylor expanded around inf 11.4
Final simplification8.3
herbie shell --seed 2019208 +o rules:numerics
(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.25361310560950359e188) (- t (* (/ y z) (- t x))) (if (< z 4.44670236911381103e64) (+ x (/ (- y z) (/ (- a z) (- t x)))) (- t (* (/ y z) (- t x)))))
(+ x (/ (* (- y z) (- t x)) (- a z))))