x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;z \le -2.326070211954311 \cdot 10^{-155} \lor \neg \left(z \le 9213813770804897800\right):\\
\;\;\;\;x \cdot \left(\left(\frac{y}{z} - \frac{{\left(\sqrt[3]{t}\right)}^{3}}{1 - z}\right) + \left(\frac{{\left(\sqrt[3]{t}\right)}^{3}}{1 - z} - \frac{{\left(\sqrt[3]{t}\right)}^{3}}{1 - z}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(y \cdot \left(1 - z\right) - z \cdot t\right)}{z \cdot \left(1 - z\right)}\\
\end{array}double f(double x, double y, double z, double t) {
double r568054 = x;
double r568055 = y;
double r568056 = z;
double r568057 = r568055 / r568056;
double r568058 = t;
double r568059 = 1.0;
double r568060 = r568059 - r568056;
double r568061 = r568058 / r568060;
double r568062 = r568057 - r568061;
double r568063 = r568054 * r568062;
return r568063;
}
double f(double x, double y, double z, double t) {
double r568064 = z;
double r568065 = -2.3260702119543115e-155;
bool r568066 = r568064 <= r568065;
double r568067 = 9.213813770804898e+18;
bool r568068 = r568064 <= r568067;
double r568069 = !r568068;
bool r568070 = r568066 || r568069;
double r568071 = x;
double r568072 = y;
double r568073 = r568072 / r568064;
double r568074 = t;
double r568075 = cbrt(r568074);
double r568076 = 3.0;
double r568077 = pow(r568075, r568076);
double r568078 = 1.0;
double r568079 = r568078 - r568064;
double r568080 = r568077 / r568079;
double r568081 = r568073 - r568080;
double r568082 = r568080 - r568080;
double r568083 = r568081 + r568082;
double r568084 = r568071 * r568083;
double r568085 = r568072 * r568079;
double r568086 = r568064 * r568074;
double r568087 = r568085 - r568086;
double r568088 = r568071 * r568087;
double r568089 = r568064 * r568079;
double r568090 = r568088 / r568089;
double r568091 = r568070 ? r568084 : r568090;
return r568091;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.7 |
|---|---|
| Target | 4.3 |
| Herbie | 4.0 |
if z < -2.3260702119543115e-155 or 9.213813770804898e+18 < z Initial program 2.6
rmApplied *-un-lft-identity2.6
Applied add-cube-cbrt3.0
Applied times-frac3.0
Applied add-sqr-sqrt27.3
Applied prod-diff27.3
Simplified3.0
Simplified3.0
if -2.3260702119543115e-155 < z < 9.213813770804898e+18Initial program 9.6
rmApplied frac-sub9.7
Applied associate-*r/6.4
Final simplification4.0
herbie shell --seed 2020042 +o rules:numerics
(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)))))