\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)}}\frac{x}{\mathsf{fma}\left(y, e^{2 \cdot \mathsf{fma}\left(c - b, \frac{5}{6} + \left(a - \frac{\frac{2}{t}}{3}\right), \left(\sqrt{t + a} \cdot \frac{\sqrt[3]{z} \cdot \sqrt[3]{z}}{\sqrt[3]{t} \cdot \sqrt[3]{t}}\right) \cdot \frac{\sqrt[3]{z}}{\sqrt[3]{t}}\right)}, x\right)}double f(double x, double y, double z, double t, double a, double b, double c) {
double r300358 = x;
double r300359 = y;
double r300360 = 2.0;
double r300361 = z;
double r300362 = t;
double r300363 = a;
double r300364 = r300362 + r300363;
double r300365 = sqrt(r300364);
double r300366 = r300361 * r300365;
double r300367 = r300366 / r300362;
double r300368 = b;
double r300369 = c;
double r300370 = r300368 - r300369;
double r300371 = 5.0;
double r300372 = 6.0;
double r300373 = r300371 / r300372;
double r300374 = r300363 + r300373;
double r300375 = 3.0;
double r300376 = r300362 * r300375;
double r300377 = r300360 / r300376;
double r300378 = r300374 - r300377;
double r300379 = r300370 * r300378;
double r300380 = r300367 - r300379;
double r300381 = r300360 * r300380;
double r300382 = exp(r300381);
double r300383 = r300359 * r300382;
double r300384 = r300358 + r300383;
double r300385 = r300358 / r300384;
return r300385;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r300386 = x;
double r300387 = y;
double r300388 = 2.0;
double r300389 = c;
double r300390 = b;
double r300391 = r300389 - r300390;
double r300392 = 5.0;
double r300393 = 6.0;
double r300394 = r300392 / r300393;
double r300395 = a;
double r300396 = t;
double r300397 = r300388 / r300396;
double r300398 = 3.0;
double r300399 = r300397 / r300398;
double r300400 = r300395 - r300399;
double r300401 = r300394 + r300400;
double r300402 = r300396 + r300395;
double r300403 = sqrt(r300402);
double r300404 = z;
double r300405 = cbrt(r300404);
double r300406 = r300405 * r300405;
double r300407 = cbrt(r300396);
double r300408 = r300407 * r300407;
double r300409 = r300406 / r300408;
double r300410 = r300403 * r300409;
double r300411 = r300405 / r300407;
double r300412 = r300410 * r300411;
double r300413 = fma(r300391, r300401, r300412);
double r300414 = r300388 * r300413;
double r300415 = exp(r300414);
double r300416 = fma(r300387, r300415, r300386);
double r300417 = r300386 / r300416;
return r300417;
}




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
| Original | 4.0 |
|---|---|
| Target | 3.3 |
| Herbie | 1.4 |
Initial program 4.0
Simplified1.8
rmApplied add-cube-cbrt1.8
Applied add-cube-cbrt1.8
Applied times-frac1.8
Applied associate-*r*1.4
Simplified1.4
Final simplification1.4
herbie shell --seed 2019179 +o rules:numerics
(FPCore (x y z t a b c)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, I"
:herbie-target
(if (< t -2.118326644891581e-50) (/ x (+ x (* y (exp (* 2.0 (- (+ (* a c) (* 0.8333333333333334 c)) (* a b))))))) (if (< t 5.196588770651547e-123) (/ x (+ x (* y (exp (* 2.0 (/ (- (* (* z (sqrt (+ t a))) (* (* 3.0 t) (- a (/ 5.0 6.0)))) (* (- (* (+ (/ 5.0 6.0) a) (* 3.0 t)) 2.0) (* (- a (/ 5.0 6.0)) (* (- b c) t)))) (* (* (* t t) 3.0) (- a (/ 5.0 6.0))))))))) (/ x (+ x (* y (exp (* 2.0 (- (/ (* z (sqrt (+ t a))) t) (* (- b c) (- (+ a (/ 5.0 6.0)) (/ 2.0 (* t 3.0))))))))))))
(/ x (+ x (* y (exp (* 2.0 (- (/ (* z (sqrt (+ t a))) t) (* (- b c) (- (+ a (/ 5.0 6.0)) (/ 2.0 (* t 3.0)))))))))))