\frac{x}{x + y \cdot e^{2 \cdot \left(\frac{z \cdot \sqrt{t + a}}{t} - \left(b - c\right) \cdot \left(\left(a + \frac{5}{6}\right) - \frac{2}{t \cdot 3}\right)\right)}}\begin{array}{l}
\mathbf{if}\;t \le -2.3617424863871238 \cdot 10^{-92}:\\
\;\;\;\;\frac{x}{x + y \cdot e^{2 \cdot \left(c \cdot \left(a + 0.83333333333333337\right) - a \cdot b\right)}}\\
\mathbf{elif}\;t \le 9.2554044737280137 \cdot 10^{-17}:\\
\;\;\;\;\frac{x}{x + y \cdot e^{2 \cdot \frac{\left(z \cdot \sqrt{t + a}\right) \cdot \left(\left(a - \frac{5}{6}\right) \cdot \left(t \cdot 3\right)\right) - t \cdot \left(\left(b - c\right) \cdot \left(\left(a \cdot a - \frac{5}{6} \cdot \frac{5}{6}\right) \cdot \left(t \cdot 3\right) - \left(a - \frac{5}{6}\right) \cdot 2\right)\right)}{t \cdot \left(\left(a - \frac{5}{6}\right) \cdot \left(t \cdot 3\right)\right)}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{x + y \cdot e^{2 \cdot \left(\frac{z \cdot \sqrt{t + a}}{t} - \left(b - c\right) \cdot \left(\left(a + \frac{5}{6}\right) - {\left({\left(\log \left(e^{\frac{\frac{2}{t}}{3}}\right)\right)}^{3}\right)}^{\frac{1}{3}}\right)\right)}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r485407 = x;
double r485408 = y;
double r485409 = 2.0;
double r485410 = z;
double r485411 = t;
double r485412 = a;
double r485413 = r485411 + r485412;
double r485414 = sqrt(r485413);
double r485415 = r485410 * r485414;
double r485416 = r485415 / r485411;
double r485417 = b;
double r485418 = c;
double r485419 = r485417 - r485418;
double r485420 = 5.0;
double r485421 = 6.0;
double r485422 = r485420 / r485421;
double r485423 = r485412 + r485422;
double r485424 = 3.0;
double r485425 = r485411 * r485424;
double r485426 = r485409 / r485425;
double r485427 = r485423 - r485426;
double r485428 = r485419 * r485427;
double r485429 = r485416 - r485428;
double r485430 = r485409 * r485429;
double r485431 = exp(r485430);
double r485432 = r485408 * r485431;
double r485433 = r485407 + r485432;
double r485434 = r485407 / r485433;
return r485434;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r485435 = t;
double r485436 = -2.3617424863871238e-92;
bool r485437 = r485435 <= r485436;
double r485438 = x;
double r485439 = y;
double r485440 = 2.0;
double r485441 = c;
double r485442 = a;
double r485443 = 0.8333333333333334;
double r485444 = r485442 + r485443;
double r485445 = r485441 * r485444;
double r485446 = b;
double r485447 = r485442 * r485446;
double r485448 = r485445 - r485447;
double r485449 = r485440 * r485448;
double r485450 = exp(r485449);
double r485451 = r485439 * r485450;
double r485452 = r485438 + r485451;
double r485453 = r485438 / r485452;
double r485454 = 9.255404473728014e-17;
bool r485455 = r485435 <= r485454;
double r485456 = z;
double r485457 = r485435 + r485442;
double r485458 = sqrt(r485457);
double r485459 = r485456 * r485458;
double r485460 = 5.0;
double r485461 = 6.0;
double r485462 = r485460 / r485461;
double r485463 = r485442 - r485462;
double r485464 = 3.0;
double r485465 = r485435 * r485464;
double r485466 = r485463 * r485465;
double r485467 = r485459 * r485466;
double r485468 = r485446 - r485441;
double r485469 = r485442 * r485442;
double r485470 = r485462 * r485462;
double r485471 = r485469 - r485470;
double r485472 = r485471 * r485465;
double r485473 = r485463 * r485440;
double r485474 = r485472 - r485473;
double r485475 = r485468 * r485474;
double r485476 = r485435 * r485475;
double r485477 = r485467 - r485476;
double r485478 = r485435 * r485466;
double r485479 = r485477 / r485478;
double r485480 = r485440 * r485479;
double r485481 = exp(r485480);
double r485482 = r485439 * r485481;
double r485483 = r485438 + r485482;
double r485484 = r485438 / r485483;
double r485485 = r485459 / r485435;
double r485486 = r485442 + r485462;
double r485487 = r485440 / r485435;
double r485488 = r485487 / r485464;
double r485489 = exp(r485488);
double r485490 = log(r485489);
double r485491 = 3.0;
double r485492 = pow(r485490, r485491);
double r485493 = 0.3333333333333333;
double r485494 = pow(r485492, r485493);
double r485495 = r485486 - r485494;
double r485496 = r485468 * r485495;
double r485497 = r485485 - r485496;
double r485498 = r485440 * r485497;
double r485499 = exp(r485498);
double r485500 = r485439 * r485499;
double r485501 = r485438 + r485500;
double r485502 = r485438 / r485501;
double r485503 = r485455 ? r485484 : r485502;
double r485504 = r485437 ? r485453 : r485503;
return r485504;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 4.1 |
|---|---|
| Target | 3.3 |
| Herbie | 5.6 |
if t < -2.3617424863871238e-92Initial program 3.6
Taylor expanded around inf 8.8
Simplified8.8
if -2.3617424863871238e-92 < t < 9.255404473728014e-17Initial program 5.4
rmApplied flip-+8.1
Applied frac-sub8.1
Applied associate-*r/8.2
Applied frac-sub6.7
if 9.255404473728014e-17 < t Initial program 2.9
rmApplied add-cbrt-cube2.9
Applied add-cbrt-cube2.9
Applied cbrt-unprod2.9
Applied add-cbrt-cube2.9
Applied cbrt-undiv2.9
Simplified2.9
rmApplied pow1/32.9
rmApplied add-log-exp3.7
Simplified3.7
Final simplification5.6
herbie shell --seed 2020042
(FPCore (x y z t a b c)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, I"
:precision binary64
:herbie-target
(if (< t -2.118326644891581e-50) (/ x (+ x (* y (exp (* 2 (- (+ (* a c) (* 0.8333333333333334 c)) (* a b))))))) (if (< t 5.196588770651547e-123) (/ x (+ x (* y (exp (* 2 (/ (- (* (* z (sqrt (+ t a))) (* (* 3 t) (- a (/ 5 6)))) (* (- (* (+ (/ 5 6) a) (* 3 t)) 2) (* (- a (/ 5 6)) (* (- b c) t)))) (* (* (* t t) 3) (- a (/ 5 6))))))))) (/ x (+ x (* y (exp (* 2 (- (/ (* z (sqrt (+ t a))) t) (* (- b c) (- (+ a (/ 5 6)) (/ 2 (* t 3))))))))))))
(/ x (+ x (* y (exp (* 2 (- (/ (* z (sqrt (+ t a))) t) (* (- b c) (- (+ a (/ 5 6)) (/ 2 (* t 3)))))))))))