x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.77245517730717617 \cdot 10^{-293}:\\
\;\;\;\;\frac{x}{\sqrt[3]{z} \cdot \sqrt[3]{z}} \cdot \frac{y}{\sqrt[3]{z}} + x \cdot \left(-\frac{t}{1 - z}\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(\frac{y}{z} - t \cdot \frac{1}{1 - z}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r443977 = x;
double r443978 = y;
double r443979 = z;
double r443980 = r443978 / r443979;
double r443981 = t;
double r443982 = 1.0;
double r443983 = r443982 - r443979;
double r443984 = r443981 / r443983;
double r443985 = r443980 - r443984;
double r443986 = r443977 * r443985;
return r443986;
}
double f(double x, double y, double z, double t) {
double r443987 = x;
double r443988 = -1.7724551773071762e-293;
bool r443989 = r443987 <= r443988;
double r443990 = z;
double r443991 = cbrt(r443990);
double r443992 = r443991 * r443991;
double r443993 = r443987 / r443992;
double r443994 = y;
double r443995 = r443994 / r443991;
double r443996 = r443993 * r443995;
double r443997 = t;
double r443998 = 1.0;
double r443999 = r443998 - r443990;
double r444000 = r443997 / r443999;
double r444001 = -r444000;
double r444002 = r443987 * r444001;
double r444003 = r443996 + r444002;
double r444004 = r443994 / r443990;
double r444005 = 1.0;
double r444006 = r444005 / r443999;
double r444007 = r443997 * r444006;
double r444008 = r444004 - r444007;
double r444009 = r443987 * r444008;
double r444010 = r443989 ? r444003 : r444009;
return r444010;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.6 |
|---|---|
| Target | 4.2 |
| Herbie | 4.6 |
if x < -1.7724551773071762e-293Initial program 4.7
rmApplied sub-neg4.7
Applied distribute-lft-in4.7
rmApplied add-cube-cbrt5.2
Applied *-un-lft-identity5.2
Applied times-frac5.2
Applied associate-*r*4.7
Simplified4.7
if -1.7724551773071762e-293 < x Initial program 4.6
rmApplied div-inv4.6
Final simplification4.6
herbie shell --seed 2020021
(FPCore (x y z t)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, C"
:precision binary64
:herbie-target
(if (< (* x (- (/ y z) (/ t (- 1 z)))) -7.623226303312042e-196) (* x (- (/ y z) (* t (/ 1 (- 1 z))))) (if (< (* x (- (/ y z) (/ t (- 1 z)))) 1.4133944927702302e-211) (+ (/ (* y x) z) (- (/ (* t x) (- 1 z)))) (* x (- (/ y z) (* t (/ 1 (- 1 z)))))))
(* x (- (/ y z) (/ t (- 1 z)))))