x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;z \le -1.679109833277264845668410827657948004904 \cdot 10^{152} \lor \neg \left(z \le 5.857684699256401932838063215739494797666 \cdot 10^{232}\right):\\
\;\;\;\;t + y \cdot \left(\frac{x}{z} - \frac{t}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \left(\frac{\sqrt[3]{y - z} \cdot \sqrt[3]{y - z}}{\sqrt[3]{a - z}} \cdot \left(\frac{\sqrt[3]{y - z}}{\sqrt[3]{a - z}} \cdot \frac{\sqrt[3]{t - x} \cdot \sqrt[3]{t - x}}{\sqrt[3]{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}}\right)\right) \cdot \frac{\sqrt[3]{t - x}}{\sqrt[3]{\sqrt[3]{a - z}}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r659081 = x;
double r659082 = y;
double r659083 = z;
double r659084 = r659082 - r659083;
double r659085 = t;
double r659086 = r659085 - r659081;
double r659087 = r659084 * r659086;
double r659088 = a;
double r659089 = r659088 - r659083;
double r659090 = r659087 / r659089;
double r659091 = r659081 + r659090;
return r659091;
}
double f(double x, double y, double z, double t, double a) {
double r659092 = z;
double r659093 = -1.6791098332772648e+152;
bool r659094 = r659092 <= r659093;
double r659095 = 5.857684699256402e+232;
bool r659096 = r659092 <= r659095;
double r659097 = !r659096;
bool r659098 = r659094 || r659097;
double r659099 = t;
double r659100 = y;
double r659101 = x;
double r659102 = r659101 / r659092;
double r659103 = r659099 / r659092;
double r659104 = r659102 - r659103;
double r659105 = r659100 * r659104;
double r659106 = r659099 + r659105;
double r659107 = r659100 - r659092;
double r659108 = cbrt(r659107);
double r659109 = r659108 * r659108;
double r659110 = a;
double r659111 = r659110 - r659092;
double r659112 = cbrt(r659111);
double r659113 = r659109 / r659112;
double r659114 = r659108 / r659112;
double r659115 = r659099 - r659101;
double r659116 = cbrt(r659115);
double r659117 = r659116 * r659116;
double r659118 = r659112 * r659112;
double r659119 = cbrt(r659118);
double r659120 = r659117 / r659119;
double r659121 = r659114 * r659120;
double r659122 = r659113 * r659121;
double r659123 = cbrt(r659112);
double r659124 = r659116 / r659123;
double r659125 = r659122 * r659124;
double r659126 = r659101 + r659125;
double r659127 = r659098 ? r659106 : r659126;
return r659127;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 25.3 |
|---|---|
| Target | 11.7 |
| Herbie | 10.1 |
if z < -1.6791098332772648e+152 or 5.857684699256402e+232 < z Initial program 49.9
rmApplied add-cube-cbrt50.2
Applied times-frac24.6
rmApplied add-cube-cbrt24.6
Applied cbrt-prod24.6
Applied add-cube-cbrt24.8
Applied times-frac24.8
Applied associate-*r*24.3
rmApplied add-cube-cbrt24.2
Applied times-frac24.2
Applied associate-*l*24.2
Taylor expanded around inf 24.9
Simplified14.6
if -1.6791098332772648e+152 < z < 5.857684699256402e+232Initial program 18.5
rmApplied add-cube-cbrt19.0
Applied times-frac9.6
rmApplied add-cube-cbrt9.6
Applied cbrt-prod9.7
Applied add-cube-cbrt9.8
Applied times-frac9.8
Applied associate-*r*9.2
rmApplied add-cube-cbrt9.2
Applied times-frac9.2
Applied associate-*l*8.8
Final simplification10.1
herbie shell --seed 2019353
(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))))