x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;a \le -1.058486243922131854439693366213147534592 \cdot 10^{-137} \lor \neg \left(a \le 1.500263932509815460676583431756462553447 \cdot 10^{-204} \lor \neg \left(a \le 7.235207005480105932402501020156182215159 \cdot 10^{-71} \lor \neg \left(a \le 95679663698008050541218776504810340352\right)\right)\right):\\
\;\;\;\;x + \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{t - x}{\sqrt[3]{a - z}}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x \cdot y}{z} + t\right) - \frac{t \cdot y}{z}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r650117 = x;
double r650118 = y;
double r650119 = z;
double r650120 = r650118 - r650119;
double r650121 = t;
double r650122 = r650121 - r650117;
double r650123 = r650120 * r650122;
double r650124 = a;
double r650125 = r650124 - r650119;
double r650126 = r650123 / r650125;
double r650127 = r650117 + r650126;
return r650127;
}
double f(double x, double y, double z, double t, double a) {
double r650128 = a;
double r650129 = -1.0584862439221319e-137;
bool r650130 = r650128 <= r650129;
double r650131 = 1.5002639325098155e-204;
bool r650132 = r650128 <= r650131;
double r650133 = 7.235207005480106e-71;
bool r650134 = r650128 <= r650133;
double r650135 = 9.567966369800805e+37;
bool r650136 = r650128 <= r650135;
double r650137 = !r650136;
bool r650138 = r650134 || r650137;
double r650139 = !r650138;
bool r650140 = r650132 || r650139;
double r650141 = !r650140;
bool r650142 = r650130 || r650141;
double r650143 = x;
double r650144 = y;
double r650145 = z;
double r650146 = r650144 - r650145;
double r650147 = cbrt(r650146);
double r650148 = r650147 * r650147;
double r650149 = r650128 - r650145;
double r650150 = cbrt(r650149);
double r650151 = r650148 / r650150;
double r650152 = r650147 / r650150;
double r650153 = t;
double r650154 = r650153 - r650143;
double r650155 = r650154 / r650150;
double r650156 = r650152 * r650155;
double r650157 = r650151 * r650156;
double r650158 = r650143 + r650157;
double r650159 = r650143 * r650144;
double r650160 = r650159 / r650145;
double r650161 = r650160 + r650153;
double r650162 = r650153 * r650144;
double r650163 = r650162 / r650145;
double r650164 = r650161 - r650163;
double r650165 = r650142 ? r650158 : r650164;
return r650165;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.9 |
|---|---|
| Target | 11.8 |
| Herbie | 12.3 |
if a < -1.0584862439221319e-137 or 1.5002639325098155e-204 < a < 7.235207005480106e-71 or 9.567966369800805e+37 < a Initial program 23.7
rmApplied add-cube-cbrt24.0
Applied times-frac9.9
rmApplied add-cube-cbrt9.9
Applied times-frac9.9
Applied associate-*l*9.7
if -1.0584862439221319e-137 < a < 1.5002639325098155e-204 or 7.235207005480106e-71 < a < 9.567966369800805e+37Initial program 28.2
Taylor expanded around inf 19.0
Final simplification12.3
herbie shell --seed 2020002
(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))))