\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(\frac{\frac{2}{t}}{3} - a\right), \frac{\sqrt{a + t}}{\frac{t}{z}}\right)}, x\right)}double f(double x, double y, double z, double t, double a, double b, double c) {
double r16374327 = x;
double r16374328 = y;
double r16374329 = 2.0;
double r16374330 = z;
double r16374331 = t;
double r16374332 = a;
double r16374333 = r16374331 + r16374332;
double r16374334 = sqrt(r16374333);
double r16374335 = r16374330 * r16374334;
double r16374336 = r16374335 / r16374331;
double r16374337 = b;
double r16374338 = c;
double r16374339 = r16374337 - r16374338;
double r16374340 = 5.0;
double r16374341 = 6.0;
double r16374342 = r16374340 / r16374341;
double r16374343 = r16374332 + r16374342;
double r16374344 = 3.0;
double r16374345 = r16374331 * r16374344;
double r16374346 = r16374329 / r16374345;
double r16374347 = r16374343 - r16374346;
double r16374348 = r16374339 * r16374347;
double r16374349 = r16374336 - r16374348;
double r16374350 = r16374329 * r16374349;
double r16374351 = exp(r16374350);
double r16374352 = r16374328 * r16374351;
double r16374353 = r16374327 + r16374352;
double r16374354 = r16374327 / r16374353;
return r16374354;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r16374355 = x;
double r16374356 = y;
double r16374357 = 2.0;
double r16374358 = c;
double r16374359 = b;
double r16374360 = r16374358 - r16374359;
double r16374361 = 5.0;
double r16374362 = 6.0;
double r16374363 = r16374361 / r16374362;
double r16374364 = t;
double r16374365 = r16374357 / r16374364;
double r16374366 = 3.0;
double r16374367 = r16374365 / r16374366;
double r16374368 = a;
double r16374369 = r16374367 - r16374368;
double r16374370 = r16374363 - r16374369;
double r16374371 = r16374368 + r16374364;
double r16374372 = sqrt(r16374371);
double r16374373 = z;
double r16374374 = r16374364 / r16374373;
double r16374375 = r16374372 / r16374374;
double r16374376 = fma(r16374360, r16374370, r16374375);
double r16374377 = r16374357 * r16374376;
double r16374378 = exp(r16374377);
double r16374379 = fma(r16374356, r16374378, r16374355);
double r16374380 = r16374355 / r16374379;
return r16374380;
}




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 | 3.9 |
|---|---|
| Target | 2.9 |
| Herbie | 1.9 |
Initial program 3.9
Simplified1.9
Final simplification1.9
herbie shell --seed 2019169 +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)))))))))))