x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;\frac{y}{z} - \frac{t}{1 - z} \le -8.578752989501030958097123839651699240527 \cdot 10^{300}:\\
\;\;\;\;\frac{x \cdot \left(y \cdot \left(1 - z\right) - z \cdot t\right)}{z \cdot \left(1 - z\right)}\\
\mathbf{elif}\;\frac{y}{z} - \frac{t}{1 - z} \le -8.674483735738366864989906414743832225827 \cdot 10^{-268}:\\
\;\;\;\;x \cdot \left(\frac{y}{z} - \frac{1}{\frac{1 - z}{t}}\right)\\
\mathbf{elif}\;\frac{y}{z} - \frac{t}{1 - z} \le 0.0:\\
\;\;\;\;\frac{\sqrt[3]{y} \cdot \sqrt[3]{y}}{{\left(\sqrt[3]{z}\right)}^{2}} \cdot \frac{x}{\frac{\sqrt[3]{z}}{\sqrt[3]{y}}} + \left(1 \cdot \frac{t \cdot x}{{z}^{2}} + \frac{t \cdot x}{z}\right)\\
\mathbf{elif}\;\frac{y}{z} - \frac{t}{1 - z} \le 1.221597588228970858235819909623175745754 \cdot 10^{229}:\\
\;\;\;\;x \cdot \left(\frac{y}{z} - \frac{1}{\frac{1 - z}{t}}\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 r336118 = x;
double r336119 = y;
double r336120 = z;
double r336121 = r336119 / r336120;
double r336122 = t;
double r336123 = 1.0;
double r336124 = r336123 - r336120;
double r336125 = r336122 / r336124;
double r336126 = r336121 - r336125;
double r336127 = r336118 * r336126;
return r336127;
}
double f(double x, double y, double z, double t) {
double r336128 = y;
double r336129 = z;
double r336130 = r336128 / r336129;
double r336131 = t;
double r336132 = 1.0;
double r336133 = r336132 - r336129;
double r336134 = r336131 / r336133;
double r336135 = r336130 - r336134;
double r336136 = -8.578752989501031e+300;
bool r336137 = r336135 <= r336136;
double r336138 = x;
double r336139 = r336128 * r336133;
double r336140 = r336129 * r336131;
double r336141 = r336139 - r336140;
double r336142 = r336138 * r336141;
double r336143 = r336129 * r336133;
double r336144 = r336142 / r336143;
double r336145 = -8.674483735738367e-268;
bool r336146 = r336135 <= r336145;
double r336147 = 1.0;
double r336148 = r336133 / r336131;
double r336149 = r336147 / r336148;
double r336150 = r336130 - r336149;
double r336151 = r336138 * r336150;
double r336152 = 0.0;
bool r336153 = r336135 <= r336152;
double r336154 = cbrt(r336128);
double r336155 = r336154 * r336154;
double r336156 = cbrt(r336129);
double r336157 = 2.0;
double r336158 = pow(r336156, r336157);
double r336159 = r336155 / r336158;
double r336160 = r336156 / r336154;
double r336161 = r336138 / r336160;
double r336162 = r336159 * r336161;
double r336163 = r336131 * r336138;
double r336164 = pow(r336129, r336157);
double r336165 = r336163 / r336164;
double r336166 = r336132 * r336165;
double r336167 = r336163 / r336129;
double r336168 = r336166 + r336167;
double r336169 = r336162 + r336168;
double r336170 = 1.2215975882289709e+229;
bool r336171 = r336135 <= r336170;
double r336172 = r336171 ? r336151 : r336144;
double r336173 = r336153 ? r336169 : r336172;
double r336174 = r336146 ? r336151 : r336173;
double r336175 = r336137 ? r336144 : r336174;
return r336175;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.6 |
|---|---|
| Target | 4.2 |
| Herbie | 0.6 |
if (- (/ y z) (/ t (- 1.0 z))) < -8.578752989501031e+300 or 1.2215975882289709e+229 < (- (/ y z) (/ t (- 1.0 z))) Initial program 33.3
rmApplied frac-sub35.5
Applied associate-*r/2.8
if -8.578752989501031e+300 < (- (/ y z) (/ t (- 1.0 z))) < -8.674483735738367e-268 or 0.0 < (- (/ y z) (/ t (- 1.0 z))) < 1.2215975882289709e+229Initial program 0.7
rmApplied clear-num0.8
if -8.674483735738367e-268 < (- (/ y z) (/ t (- 1.0 z))) < 0.0Initial program 13.2
rmApplied clear-num13.8
Taylor expanded around inf 0.1
rmApplied associate-/l*8.7
rmApplied add-cube-cbrt8.7
Applied add-cube-cbrt8.7
Applied times-frac8.7
Applied *-un-lft-identity8.7
Applied times-frac1.1
Simplified0.9
Final simplification0.6
herbie shell --seed 2019294
(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.62322630331204244e-196) (* x (- (/ y z) (* t (/ 1 (- 1 z))))) (if (< (* x (- (/ y z) (/ t (- 1 z)))) 1.41339449277023022e-211) (+ (/ (* y x) z) (- (/ (* t x) (- 1 z)))) (* x (- (/ y z) (* t (/ 1 (- 1 z)))))))
(* x (- (/ y z) (/ t (- 1 z)))))