x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;a \le -3.4167661692054223 \cdot 10^{-133}:\\
\;\;\;\;\frac{\sqrt[3]{t - x}}{\sqrt[3]{a - z}} \cdot \frac{y - z}{\frac{\sqrt[3]{a - z}}{\sqrt[3]{t - x}} \cdot \frac{\sqrt[3]{a - z}}{\sqrt[3]{t - x}}} + x\\
\mathbf{elif}\;a \le 1.3917837591469568 \cdot 10^{-93}:\\
\;\;\;\;y \cdot \left(\frac{x}{z} - \frac{t}{z}\right) + t\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{t - x}}{\sqrt[3]{a - z}} \cdot \frac{y - z}{\frac{\sqrt[3]{a - z}}{\sqrt[3]{t - x}} \cdot \frac{\sqrt[3]{a - z}}{\sqrt[3]{t - x}}} + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r33499620 = x;
double r33499621 = y;
double r33499622 = z;
double r33499623 = r33499621 - r33499622;
double r33499624 = t;
double r33499625 = r33499624 - r33499620;
double r33499626 = r33499623 * r33499625;
double r33499627 = a;
double r33499628 = r33499627 - r33499622;
double r33499629 = r33499626 / r33499628;
double r33499630 = r33499620 + r33499629;
return r33499630;
}
double f(double x, double y, double z, double t, double a) {
double r33499631 = a;
double r33499632 = -3.4167661692054223e-133;
bool r33499633 = r33499631 <= r33499632;
double r33499634 = t;
double r33499635 = x;
double r33499636 = r33499634 - r33499635;
double r33499637 = cbrt(r33499636);
double r33499638 = z;
double r33499639 = r33499631 - r33499638;
double r33499640 = cbrt(r33499639);
double r33499641 = r33499637 / r33499640;
double r33499642 = y;
double r33499643 = r33499642 - r33499638;
double r33499644 = r33499640 / r33499637;
double r33499645 = r33499644 * r33499644;
double r33499646 = r33499643 / r33499645;
double r33499647 = r33499641 * r33499646;
double r33499648 = r33499647 + r33499635;
double r33499649 = 1.3917837591469568e-93;
bool r33499650 = r33499631 <= r33499649;
double r33499651 = r33499635 / r33499638;
double r33499652 = r33499634 / r33499638;
double r33499653 = r33499651 - r33499652;
double r33499654 = r33499642 * r33499653;
double r33499655 = r33499654 + r33499634;
double r33499656 = r33499650 ? r33499655 : r33499648;
double r33499657 = r33499633 ? r33499648 : r33499656;
return r33499657;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 23.8 |
|---|---|
| Target | 11.9 |
| Herbie | 9.7 |
if a < -3.4167661692054223e-133 or 1.3917837591469568e-93 < a Initial program 21.5
rmApplied add-cube-cbrt21.9
Applied times-frac9.2
rmApplied *-un-lft-identity9.2
Applied cbrt-prod9.2
Applied add-cube-cbrt9.4
Applied times-frac9.4
Applied associate-*r*8.9
Simplified9.1
if -3.4167661692054223e-133 < a < 1.3917837591469568e-93Initial program 29.7
rmApplied add-cube-cbrt30.3
Applied times-frac21.6
rmApplied *-un-lft-identity21.6
Applied cbrt-prod21.6
Applied add-cube-cbrt21.8
Applied times-frac21.8
Applied associate-*r*20.8
Simplified20.7
Taylor expanded around inf 14.3
Simplified11.2
Final simplification9.7
herbie shell --seed 2019162
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:invLinMap from Chart-1.5.3"
: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))))