\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\left(x - 0.5\right) \cdot \left(\log \left(\sqrt{x}\right) + 2 \cdot \log \left(\sqrt{\sqrt{x}}\right)\right) - \left(x - \left(0.9189385332046700050057097541866824030876 + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\right)\right)double f(double x, double y, double z) {
double r350506 = x;
double r350507 = 0.5;
double r350508 = r350506 - r350507;
double r350509 = log(r350506);
double r350510 = r350508 * r350509;
double r350511 = r350510 - r350506;
double r350512 = 0.91893853320467;
double r350513 = r350511 + r350512;
double r350514 = y;
double r350515 = 0.0007936500793651;
double r350516 = r350514 + r350515;
double r350517 = z;
double r350518 = r350516 * r350517;
double r350519 = 0.0027777777777778;
double r350520 = r350518 - r350519;
double r350521 = r350520 * r350517;
double r350522 = 0.083333333333333;
double r350523 = r350521 + r350522;
double r350524 = r350523 / r350506;
double r350525 = r350513 + r350524;
return r350525;
}
double f(double x, double y, double z) {
double r350526 = x;
double r350527 = 0.5;
double r350528 = r350526 - r350527;
double r350529 = sqrt(r350526);
double r350530 = log(r350529);
double r350531 = 2.0;
double r350532 = sqrt(r350529);
double r350533 = log(r350532);
double r350534 = r350531 * r350533;
double r350535 = r350530 + r350534;
double r350536 = r350528 * r350535;
double r350537 = 0.91893853320467;
double r350538 = y;
double r350539 = 0.0007936500793651;
double r350540 = r350538 + r350539;
double r350541 = z;
double r350542 = r350540 * r350541;
double r350543 = 0.0027777777777778;
double r350544 = r350542 - r350543;
double r350545 = r350544 * r350541;
double r350546 = 0.083333333333333;
double r350547 = r350545 + r350546;
double r350548 = r350547 / r350526;
double r350549 = r350537 + r350548;
double r350550 = r350526 - r350549;
double r350551 = r350536 - r350550;
return r350551;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.9 |
|---|---|
| Target | 1.1 |
| Herbie | 5.9 |
Initial program 5.9
rmApplied add-sqr-sqrt5.9
Applied log-prod5.9
Applied distribute-lft-in5.9
Applied associate--l+6.0
Applied associate-+l+6.0
Simplified6.0
rmApplied add-sqr-sqrt6.0
Applied sqrt-prod6.0
Applied log-prod6.0
Applied distribute-lft-in6.0
Applied associate-+l+6.0
Simplified6.0
Final simplification5.9
herbie shell --seed 2019294
(FPCore (x y z)
:name "Numeric.SpecFunctions:$slogFactorial from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(+ (+ (+ (* (- x 0.5) (log x)) (- 0.91893853320467001 x)) (/ 0.0833333333333329956 x)) (* (/ z x) (- (* z (+ y 7.93650079365100015e-4)) 0.0027777777777778)))
(+ (+ (- (* (- x 0.5) (log x)) x) 0.91893853320467001) (/ (+ (* (- (* (+ y 7.93650079365100015e-4) z) 0.0027777777777778) z) 0.0833333333333329956) x)))