\frac{x \cdot e^{\left(y \cdot \log z + \left(t - 1\right) \cdot \log a\right) - b}}{y}\begin{array}{l}
\mathbf{if}\;x \le -8.9526966727005439 \cdot 10^{73} \lor \neg \left(x \le 1.54253563263351339 \cdot 10^{-62}\right):\\
\;\;\;\;\frac{x \cdot \frac{{\left(\frac{1}{a}\right)}^{1}}{e^{y \cdot \log \left(\frac{1}{z}\right) + \left(\log \left(\frac{1}{a}\right) \cdot t + b\right)}}}{y}\\
\mathbf{else}:\\
\;\;\;\;{\left(\frac{1}{a}\right)}^{1} \cdot \frac{\frac{1}{e^{y \cdot \log \left(\frac{1}{z}\right) + \left(\log \left(\frac{1}{a}\right) \cdot t + b\right)}}}{\frac{y}{x}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r642105 = x;
double r642106 = y;
double r642107 = z;
double r642108 = log(r642107);
double r642109 = r642106 * r642108;
double r642110 = t;
double r642111 = 1.0;
double r642112 = r642110 - r642111;
double r642113 = a;
double r642114 = log(r642113);
double r642115 = r642112 * r642114;
double r642116 = r642109 + r642115;
double r642117 = b;
double r642118 = r642116 - r642117;
double r642119 = exp(r642118);
double r642120 = r642105 * r642119;
double r642121 = r642120 / r642106;
return r642121;
}
double f(double x, double y, double z, double t, double a, double b) {
double r642122 = x;
double r642123 = -8.952696672700544e+73;
bool r642124 = r642122 <= r642123;
double r642125 = 1.5425356326335134e-62;
bool r642126 = r642122 <= r642125;
double r642127 = !r642126;
bool r642128 = r642124 || r642127;
double r642129 = 1.0;
double r642130 = a;
double r642131 = r642129 / r642130;
double r642132 = 1.0;
double r642133 = pow(r642131, r642132);
double r642134 = y;
double r642135 = z;
double r642136 = r642129 / r642135;
double r642137 = log(r642136);
double r642138 = r642134 * r642137;
double r642139 = log(r642131);
double r642140 = t;
double r642141 = r642139 * r642140;
double r642142 = b;
double r642143 = r642141 + r642142;
double r642144 = r642138 + r642143;
double r642145 = exp(r642144);
double r642146 = r642133 / r642145;
double r642147 = r642122 * r642146;
double r642148 = r642147 / r642134;
double r642149 = r642129 / r642145;
double r642150 = r642134 / r642122;
double r642151 = r642149 / r642150;
double r642152 = r642133 * r642151;
double r642153 = r642128 ? r642148 : r642152;
return r642153;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 2.0 |
|---|---|
| Target | 10.9 |
| Herbie | 0.3 |
if x < -8.952696672700544e+73 or 1.5425356326335134e-62 < x Initial program 0.9
Taylor expanded around inf 0.9
Simplified0.2
if -8.952696672700544e+73 < x < 1.5425356326335134e-62Initial program 3.0
Taylor expanded around inf 3.0
Simplified0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied div-inv0.4
Applied times-frac0.4
Simplified0.4
Final simplification0.3
herbie shell --seed 2020057
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:incompleteBetaWorker from math-functions-0.1.5.2, A"
:precision binary64
:herbie-target
(if (< t -0.8845848504127471) (/ (* x (/ (pow a (- t 1)) y)) (- (+ b 1) (* y (log z)))) (if (< t 852031.2288374073) (/ (* (/ x y) (pow a (- t 1))) (exp (- b (* (log z) y)))) (/ (* x (/ (pow a (- t 1)) y)) (- (+ b 1) (* y (log z))))))
(/ (* x (exp (- (+ (* y (log z)) (* (- t 1) (log a))) b))) y))