\frac{6 \cdot \left(x - 1\right)}{\left(x + 1\right) + 4 \cdot \sqrt{x}}\frac{\frac{6}{\frac{\sqrt{\mathsf{fma}\left(\sqrt{x}, 4, x + 1\right)}}{\sqrt{1} + \sqrt{x}}}}{\frac{\sqrt{\mathsf{fma}\left(\sqrt{x}, 4, x + 1\right)}}{\sqrt{x} - \sqrt{1}}}double f(double x) {
double r42114506 = 6.0;
double r42114507 = x;
double r42114508 = 1.0;
double r42114509 = r42114507 - r42114508;
double r42114510 = r42114506 * r42114509;
double r42114511 = r42114507 + r42114508;
double r42114512 = 4.0;
double r42114513 = sqrt(r42114507);
double r42114514 = r42114512 * r42114513;
double r42114515 = r42114511 + r42114514;
double r42114516 = r42114510 / r42114515;
return r42114516;
}
double f(double x) {
double r42114517 = 6.0;
double r42114518 = x;
double r42114519 = sqrt(r42114518);
double r42114520 = 4.0;
double r42114521 = 1.0;
double r42114522 = r42114518 + r42114521;
double r42114523 = fma(r42114519, r42114520, r42114522);
double r42114524 = sqrt(r42114523);
double r42114525 = sqrt(r42114521);
double r42114526 = r42114525 + r42114519;
double r42114527 = r42114524 / r42114526;
double r42114528 = r42114517 / r42114527;
double r42114529 = r42114519 - r42114525;
double r42114530 = r42114524 / r42114529;
double r42114531 = r42114528 / r42114530;
return r42114531;
}




Bits error versus x
| Original | 0.2 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 0.2
Simplified0.1
rmApplied add-sqr-sqrt0.1
Applied add-sqr-sqrt0.3
Applied difference-of-squares0.3
Applied add-sqr-sqrt0.1
Applied times-frac0.1
Applied associate-/r*0.1
Final simplification0.1
herbie shell --seed 2019172 +o rules:numerics
(FPCore (x)
:name "Data.Approximate.Numerics:blog from approximate-0.2.2.1"
:herbie-target
(/ 6.0 (/ (+ (+ x 1.0) (* 4.0 (sqrt x))) (- x 1.0)))
(/ (* 6.0 (- x 1.0)) (+ (+ x 1.0) (* 4.0 (sqrt x)))))