x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;y \le -3.599161882380860986274067861276296814944 \cdot 10^{161}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, y, \mathsf{fma}\left(\frac{1}{z}, \frac{t}{z} \cdot \left(\sqrt[3]{-1} \cdot \left(x \cdot \sqrt[3]{-1}\right)\right), \frac{t}{z} \cdot \left(\sqrt[3]{-1} \cdot \left(x \cdot \sqrt[3]{-1}\right)\right)\right)\right)\\
\mathbf{elif}\;y \le 4.007151337874132693715778122963539496426 \cdot 10^{77}:\\
\;\;\;\;\left(\frac{y}{z} - \left(\left(\sqrt[3]{-1} \cdot \sqrt[3]{-t}\right) \cdot \sqrt[3]{t}\right) \cdot \frac{\sqrt[3]{t}}{1 - z}\right) \cdot x\\
\mathbf{elif}\;y \le 2.281820999912937139505132332138038958965 \cdot 10^{119}:\\
\;\;\;\;\frac{\left(y \cdot \left(1 - z\right) - z \cdot t\right) \cdot x}{z \cdot \left(1 - z\right)}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, y, \mathsf{fma}\left(\frac{1}{z}, \frac{t}{z} \cdot \left(\sqrt[3]{-1} \cdot \left(x \cdot \sqrt[3]{-1}\right)\right), \frac{t}{z} \cdot \left(\sqrt[3]{-1} \cdot \left(x \cdot \sqrt[3]{-1}\right)\right)\right)\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r17870302 = x;
double r17870303 = y;
double r17870304 = z;
double r17870305 = r17870303 / r17870304;
double r17870306 = t;
double r17870307 = 1.0;
double r17870308 = r17870307 - r17870304;
double r17870309 = r17870306 / r17870308;
double r17870310 = r17870305 - r17870309;
double r17870311 = r17870302 * r17870310;
return r17870311;
}
double f(double x, double y, double z, double t) {
double r17870312 = y;
double r17870313 = -3.599161882380861e+161;
bool r17870314 = r17870312 <= r17870313;
double r17870315 = x;
double r17870316 = z;
double r17870317 = r17870315 / r17870316;
double r17870318 = 1.0;
double r17870319 = r17870318 / r17870316;
double r17870320 = t;
double r17870321 = r17870320 / r17870316;
double r17870322 = -1.0;
double r17870323 = cbrt(r17870322);
double r17870324 = r17870315 * r17870323;
double r17870325 = r17870323 * r17870324;
double r17870326 = r17870321 * r17870325;
double r17870327 = fma(r17870319, r17870326, r17870326);
double r17870328 = fma(r17870317, r17870312, r17870327);
double r17870329 = 4.0071513378741327e+77;
bool r17870330 = r17870312 <= r17870329;
double r17870331 = r17870312 / r17870316;
double r17870332 = -r17870320;
double r17870333 = cbrt(r17870332);
double r17870334 = r17870323 * r17870333;
double r17870335 = cbrt(r17870320);
double r17870336 = r17870334 * r17870335;
double r17870337 = r17870318 - r17870316;
double r17870338 = r17870335 / r17870337;
double r17870339 = r17870336 * r17870338;
double r17870340 = r17870331 - r17870339;
double r17870341 = r17870340 * r17870315;
double r17870342 = 2.281820999912937e+119;
bool r17870343 = r17870312 <= r17870342;
double r17870344 = r17870312 * r17870337;
double r17870345 = r17870316 * r17870320;
double r17870346 = r17870344 - r17870345;
double r17870347 = r17870346 * r17870315;
double r17870348 = r17870316 * r17870337;
double r17870349 = r17870347 / r17870348;
double r17870350 = r17870343 ? r17870349 : r17870328;
double r17870351 = r17870330 ? r17870341 : r17870350;
double r17870352 = r17870314 ? r17870328 : r17870351;
return r17870352;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 4.8 |
|---|---|
| Target | 4.5 |
| Herbie | 6.7 |
if y < -3.599161882380861e+161 or 2.281820999912937e+119 < y Initial program 13.0
rmApplied *-un-lft-identity13.0
Applied add-cube-cbrt13.1
Applied times-frac13.1
Simplified13.1
Taylor expanded around -inf 38.7
Simplified13.1
Taylor expanded around inf 22.7
Simplified16.7
if -3.599161882380861e+161 < y < 4.0071513378741327e+77Initial program 2.5
rmApplied *-un-lft-identity2.5
Applied add-cube-cbrt3.0
Applied times-frac3.0
Simplified3.0
Taylor expanded around -inf 34.7
Simplified3.0
if 4.0071513378741327e+77 < y < 2.281820999912937e+119Initial program 4.5
rmApplied *-un-lft-identity4.5
Applied add-cube-cbrt4.7
Applied times-frac4.7
Simplified4.7
rmApplied associate-*r/4.7
Applied frac-sub27.2
Applied associate-*r/27.8
Simplified27.7
Final simplification6.7
herbie shell --seed 2019169 +o rules:numerics
(FPCore (x y z t)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, C"
:herbie-target
(if (< (* x (- (/ y z) (/ t (- 1.0 z)))) -7.623226303312042e-196) (* x (- (/ y z) (* t (/ 1.0 (- 1.0 z))))) (if (< (* x (- (/ y z) (/ t (- 1.0 z)))) 1.4133944927702302e-211) (+ (/ (* y x) z) (- (/ (* t x) (- 1.0 z)))) (* x (- (/ y z) (* t (/ 1.0 (- 1.0 z)))))))
(* x (- (/ y z) (/ t (- 1.0 z)))))