x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;z \le -1.05779727369286190042854981278171337128 \cdot 10^{192} \lor \neg \left(z \le 4.892583137041056825995118094598819433784 \cdot 10^{158}\right):\\
\;\;\;\;t + y \cdot \left(\frac{x}{z} - \frac{t}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \left(\frac{y - z}{\sqrt[3]{a - z} \cdot \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) \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 r417292 = x;
double r417293 = y;
double r417294 = z;
double r417295 = r417293 - r417294;
double r417296 = t;
double r417297 = r417296 - r417292;
double r417298 = r417295 * r417297;
double r417299 = a;
double r417300 = r417299 - r417294;
double r417301 = r417298 / r417300;
double r417302 = r417292 + r417301;
return r417302;
}
double f(double x, double y, double z, double t, double a) {
double r417303 = z;
double r417304 = -1.0577972736928619e+192;
bool r417305 = r417303 <= r417304;
double r417306 = 4.892583137041057e+158;
bool r417307 = r417303 <= r417306;
double r417308 = !r417307;
bool r417309 = r417305 || r417308;
double r417310 = t;
double r417311 = y;
double r417312 = x;
double r417313 = r417312 / r417303;
double r417314 = r417310 / r417303;
double r417315 = r417313 - r417314;
double r417316 = r417311 * r417315;
double r417317 = r417310 + r417316;
double r417318 = r417311 - r417303;
double r417319 = a;
double r417320 = r417319 - r417303;
double r417321 = cbrt(r417320);
double r417322 = r417321 * r417321;
double r417323 = r417318 / r417322;
double r417324 = r417310 - r417312;
double r417325 = cbrt(r417324);
double r417326 = r417325 * r417325;
double r417327 = cbrt(r417322);
double r417328 = r417326 / r417327;
double r417329 = r417323 * r417328;
double r417330 = cbrt(r417321);
double r417331 = r417325 / r417330;
double r417332 = r417329 * r417331;
double r417333 = r417312 + r417332;
double r417334 = r417309 ? r417317 : r417333;
return r417334;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 25.1 |
|---|---|
| Target | 11.8 |
| Herbie | 10.1 |
if z < -1.0577972736928619e+192 or 4.892583137041057e+158 < z Initial program 49.6
rmApplied add-cube-cbrt49.8
Applied times-frac24.1
rmApplied add-cube-cbrt24.2
Applied cbrt-prod24.2
Applied add-cube-cbrt24.4
Applied times-frac24.4
Applied associate-*r*24.1
Taylor expanded around inf 23.7
Simplified14.7
if -1.0577972736928619e+192 < z < 4.892583137041057e+158Initial program 17.0
rmApplied add-cube-cbrt17.5
Applied times-frac9.0
rmApplied add-cube-cbrt9.0
Applied cbrt-prod9.1
Applied add-cube-cbrt9.2
Applied times-frac9.2
Applied associate-*r*8.6
Final simplification10.1
herbie shell --seed 2019322
(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))))