x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;x \le -2.2101704997358074 \cdot 10^{102}:\\
\;\;\;\;\frac{x \cdot y}{z} + \left(-t\right) \cdot \frac{x}{1 - z}\\
\mathbf{elif}\;x \le -2.64010970512552713 \cdot 10^{-286}:\\
\;\;\;\;y \cdot \frac{x}{z} + \left(-\frac{t}{1 - z}\right) \cdot x\\
\mathbf{elif}\;x \le 1.70551157256399953 \cdot 10^{-66}:\\
\;\;\;\;\left(-\sqrt[3]{\frac{t}{1 - z}} \cdot \sqrt[3]{\frac{t}{1 - z}}\right) \cdot \left(\sqrt[3]{\frac{t}{1 - z}} \cdot x\right) + \frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\left(-\frac{t}{1 - z}\right) \cdot x + \frac{x}{\frac{z}{y}}\\
\end{array}double f(double x, double y, double z, double t) {
double r317962 = x;
double r317963 = y;
double r317964 = z;
double r317965 = r317963 / r317964;
double r317966 = t;
double r317967 = 1.0;
double r317968 = r317967 - r317964;
double r317969 = r317966 / r317968;
double r317970 = r317965 - r317969;
double r317971 = r317962 * r317970;
return r317971;
}
double f(double x, double y, double z, double t) {
double r317972 = x;
double r317973 = -2.2101704997358074e+102;
bool r317974 = r317972 <= r317973;
double r317975 = y;
double r317976 = r317972 * r317975;
double r317977 = z;
double r317978 = r317976 / r317977;
double r317979 = t;
double r317980 = -r317979;
double r317981 = 1.0;
double r317982 = r317981 - r317977;
double r317983 = r317972 / r317982;
double r317984 = r317980 * r317983;
double r317985 = r317978 + r317984;
double r317986 = -2.640109705125527e-286;
bool r317987 = r317972 <= r317986;
double r317988 = r317972 / r317977;
double r317989 = r317975 * r317988;
double r317990 = r317979 / r317982;
double r317991 = -r317990;
double r317992 = r317991 * r317972;
double r317993 = r317989 + r317992;
double r317994 = 1.7055115725639995e-66;
bool r317995 = r317972 <= r317994;
double r317996 = cbrt(r317990);
double r317997 = r317996 * r317996;
double r317998 = -r317997;
double r317999 = r317996 * r317972;
double r318000 = r317998 * r317999;
double r318001 = r318000 + r317978;
double r318002 = r317977 / r317975;
double r318003 = r317972 / r318002;
double r318004 = r317992 + r318003;
double r318005 = r317995 ? r318001 : r318004;
double r318006 = r317987 ? r317993 : r318005;
double r318007 = r317974 ? r317985 : r318006;
return r318007;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.4 |
|---|---|
| Target | 4.1 |
| Herbie | 4.4 |
if x < -2.2101704997358074e+102Initial program 4.4
rmApplied sub-neg4.4
Applied distribute-rgt-in4.4
rmApplied pow14.4
Applied pow14.4
Applied pow-prod-down4.4
Simplified13.4
rmApplied div-inv13.4
Applied distribute-lft-neg-in13.4
Applied associate-*l*11.4
Simplified11.4
if -2.2101704997358074e+102 < x < -2.640109705125527e-286Initial program 4.3
rmApplied sub-neg4.3
Applied distribute-rgt-in4.3
rmApplied div-inv4.3
Applied associate-*l*4.1
Simplified4.1
if -2.640109705125527e-286 < x < 1.7055115725639995e-66Initial program 6.5
rmApplied sub-neg6.5
Applied distribute-rgt-in6.5
rmApplied pow16.5
Applied pow16.5
Applied pow-prod-down6.5
Simplified3.3
rmApplied add-cube-cbrt3.6
Applied distribute-lft-neg-in3.6
Applied associate-*l*3.6
if 1.7055115725639995e-66 < x Initial program 2.6
rmApplied sub-neg2.6
Applied distribute-rgt-in2.6
rmApplied pow12.6
Applied pow12.6
Applied pow-prod-down2.6
Simplified7.1
rmApplied associate-/l*2.6
Final simplification4.4
herbie shell --seed 2019199
(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)))))