\frac{x \cdot e^{\left(y \cdot \log z + \left(t - 1\right) \cdot \log a\right) - b}}{y}\begin{array}{l}
\mathbf{if}\;\left(t - 1\right) \cdot \log a \le -702.6583505807568599266232922673225402832 \lor \neg \left(\left(t - 1\right) \cdot \log a \le -106.4073004455099749065993819385766983032\right):\\
\;\;\;\;\frac{x \cdot e^{\left(\left(t - 1\right) \cdot \log a + \log z \cdot y\right) - b}}{y}\\
\mathbf{else}:\\
\;\;\;\;\frac{e^{\log \left({z}^{y}\right) + t \cdot \log a}}{y \cdot \left(a \cdot e^{b}\right)} \cdot x\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r375169 = x;
double r375170 = y;
double r375171 = z;
double r375172 = log(r375171);
double r375173 = r375170 * r375172;
double r375174 = t;
double r375175 = 1.0;
double r375176 = r375174 - r375175;
double r375177 = a;
double r375178 = log(r375177);
double r375179 = r375176 * r375178;
double r375180 = r375173 + r375179;
double r375181 = b;
double r375182 = r375180 - r375181;
double r375183 = exp(r375182);
double r375184 = r375169 * r375183;
double r375185 = r375184 / r375170;
return r375185;
}
double f(double x, double y, double z, double t, double a, double b) {
double r375186 = t;
double r375187 = 1.0;
double r375188 = r375186 - r375187;
double r375189 = a;
double r375190 = log(r375189);
double r375191 = r375188 * r375190;
double r375192 = -702.6583505807569;
bool r375193 = r375191 <= r375192;
double r375194 = -106.40730044550997;
bool r375195 = r375191 <= r375194;
double r375196 = !r375195;
bool r375197 = r375193 || r375196;
double r375198 = x;
double r375199 = z;
double r375200 = log(r375199);
double r375201 = y;
double r375202 = r375200 * r375201;
double r375203 = r375191 + r375202;
double r375204 = b;
double r375205 = r375203 - r375204;
double r375206 = exp(r375205);
double r375207 = r375198 * r375206;
double r375208 = r375207 / r375201;
double r375209 = pow(r375199, r375201);
double r375210 = log(r375209);
double r375211 = r375186 * r375190;
double r375212 = r375210 + r375211;
double r375213 = exp(r375212);
double r375214 = exp(r375204);
double r375215 = r375189 * r375214;
double r375216 = r375201 * r375215;
double r375217 = r375213 / r375216;
double r375218 = r375217 * r375198;
double r375219 = r375197 ? r375208 : r375218;
return r375219;
}




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.1 |
|---|---|
| Target | 11.6 |
| Herbie | 1.9 |
if (* (- t 1.0) (log a)) < -702.6583505807569 or -106.40730044550997 < (* (- t 1.0) (log a)) Initial program 0.6
if -702.6583505807569 < (* (- t 1.0) (log a)) < -106.40730044550997Initial program 6.9
rmApplied associate-/l*2.3
Simplified6.1
rmApplied *-un-lft-identity6.1
Applied sub-neg6.1
Applied unpow-prod-up6.0
Applied times-frac6.0
Applied associate-*r*6.0
Simplified6.0
rmApplied div-inv6.0
Simplified6.0
Taylor expanded around inf 6.0
Simplified6.0
Final simplification1.9
herbie shell --seed 2019196
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:incompleteBetaWorker from math-functions-0.1.5.2, A"
:herbie-target
(if (< t -0.8845848504127471) (/ (* x (/ (pow a (- t 1.0)) y)) (- (+ b 1.0) (* y (log z)))) (if (< t 852031.2288374073) (/ (* (/ x y) (pow a (- t 1.0))) (exp (- b (* (log z) y)))) (/ (* x (/ (pow a (- t 1.0)) y)) (- (+ b 1.0) (* y (log z))))))
(/ (* x (exp (- (+ (* y (log z)) (* (- t 1.0) (log a))) b))) y))