x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;a \le -8.40974200722042392 \cdot 10^{-79}:\\
\;\;\;\;\left(t \cdot \frac{\sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}} \cdot \sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}}}{\sqrt[3]{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}}\right) \cdot \frac{\sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}}}{\sqrt[3]{\sqrt[3]{a - z}}} + \mathsf{fma}\left(-x, \frac{y - z}{a - z}, x\right)\\
\mathbf{elif}\;a \le 3.54614619959030645 \cdot 10^{-159}:\\
\;\;\;\;t \cdot \frac{y - z}{a - z} + \frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\left(t \cdot \frac{\sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}} \cdot \sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}}}{\sqrt[3]{\sqrt[3]{a - z}} \cdot \sqrt[3]{\sqrt[3]{a - z}}}\right) \cdot \frac{\sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}}}{\sqrt[3]{\sqrt[3]{a - z}}} + \mathsf{fma}\left(-x, \frac{y - z}{a - z}, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r1331462 = x;
double r1331463 = y;
double r1331464 = z;
double r1331465 = r1331463 - r1331464;
double r1331466 = t;
double r1331467 = r1331466 - r1331462;
double r1331468 = r1331465 * r1331467;
double r1331469 = a;
double r1331470 = r1331469 - r1331464;
double r1331471 = r1331468 / r1331470;
double r1331472 = r1331462 + r1331471;
return r1331472;
}
double f(double x, double y, double z, double t, double a) {
double r1331473 = a;
double r1331474 = -8.409742007220424e-79;
bool r1331475 = r1331473 <= r1331474;
double r1331476 = t;
double r1331477 = y;
double r1331478 = z;
double r1331479 = r1331477 - r1331478;
double r1331480 = r1331473 - r1331478;
double r1331481 = cbrt(r1331480);
double r1331482 = r1331481 * r1331481;
double r1331483 = r1331479 / r1331482;
double r1331484 = cbrt(r1331483);
double r1331485 = r1331484 * r1331484;
double r1331486 = cbrt(r1331482);
double r1331487 = r1331485 / r1331486;
double r1331488 = r1331476 * r1331487;
double r1331489 = cbrt(r1331481);
double r1331490 = r1331484 / r1331489;
double r1331491 = r1331488 * r1331490;
double r1331492 = x;
double r1331493 = -r1331492;
double r1331494 = r1331479 / r1331480;
double r1331495 = fma(r1331493, r1331494, r1331492);
double r1331496 = r1331491 + r1331495;
double r1331497 = 3.5461461995903064e-159;
bool r1331498 = r1331473 <= r1331497;
double r1331499 = r1331476 * r1331494;
double r1331500 = r1331492 * r1331477;
double r1331501 = r1331500 / r1331478;
double r1331502 = r1331499 + r1331501;
double r1331503 = r1331489 * r1331489;
double r1331504 = r1331485 / r1331503;
double r1331505 = r1331476 * r1331504;
double r1331506 = r1331505 * r1331490;
double r1331507 = r1331506 + r1331495;
double r1331508 = r1331498 ? r1331502 : r1331507;
double r1331509 = r1331475 ? r1331496 : r1331508;
return r1331509;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.1 |
|---|---|
| Target | 11.6 |
| Herbie | 7.8 |
if a < -8.409742007220424e-79Initial program 22.2
Simplified8.0
rmApplied fma-udef8.0
rmApplied sub-neg8.0
Applied distribute-rgt-in8.0
Applied associate-+l+5.8
Simplified5.8
rmApplied add-cube-cbrt6.3
Applied associate-/r*6.3
rmApplied add-cube-cbrt6.3
Applied cbrt-prod6.4
Applied add-cube-cbrt6.5
Applied times-frac6.5
Applied associate-*r*6.2
if -8.409742007220424e-79 < a < 3.5461461995903064e-159Initial program 29.1
Simplified20.2
rmApplied fma-udef20.2
rmApplied sub-neg20.2
Applied distribute-rgt-in20.2
Applied associate-+l+11.8
Simplified11.8
Taylor expanded around inf 11.5
if 3.5461461995903064e-159 < a Initial program 22.4
Simplified9.1
rmApplied fma-udef9.2
rmApplied sub-neg9.2
Applied distribute-rgt-in9.2
Applied associate-+l+6.2
Simplified6.2
rmApplied add-cube-cbrt6.7
Applied associate-/r*6.7
rmApplied add-cube-cbrt6.9
Applied add-cube-cbrt6.9
Applied times-frac6.9
Applied associate-*r*6.8
Final simplification7.8
herbie shell --seed 2020034 +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.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))))