\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}\begin{array}{l}
\mathbf{if}\;x \le 139847743809662.46875:\\
\;\;\;\;\left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) + \mathsf{fma}\left(\log \left(\sqrt[3]{x}\right), x - 0.5, 0.9189385332046700050057097541866824030876 - x\right)\right) + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{{z}^{2}}{x}, y, 7.936500793651000149400709382518925849581 \cdot 10^{-4} \cdot \frac{{z}^{2}}{x} - \mathsf{fma}\left(\log \left(\frac{1}{x}\right), x, x\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r383482 = x;
double r383483 = 0.5;
double r383484 = r383482 - r383483;
double r383485 = log(r383482);
double r383486 = r383484 * r383485;
double r383487 = r383486 - r383482;
double r383488 = 0.91893853320467;
double r383489 = r383487 + r383488;
double r383490 = y;
double r383491 = 0.0007936500793651;
double r383492 = r383490 + r383491;
double r383493 = z;
double r383494 = r383492 * r383493;
double r383495 = 0.0027777777777778;
double r383496 = r383494 - r383495;
double r383497 = r383496 * r383493;
double r383498 = 0.083333333333333;
double r383499 = r383497 + r383498;
double r383500 = r383499 / r383482;
double r383501 = r383489 + r383500;
return r383501;
}
double f(double x, double y, double z) {
double r383502 = x;
double r383503 = 139847743809662.47;
bool r383504 = r383502 <= r383503;
double r383505 = 0.5;
double r383506 = r383502 - r383505;
double r383507 = cbrt(r383502);
double r383508 = r383507 * r383507;
double r383509 = log(r383508);
double r383510 = r383506 * r383509;
double r383511 = log(r383507);
double r383512 = 0.91893853320467;
double r383513 = r383512 - r383502;
double r383514 = fma(r383511, r383506, r383513);
double r383515 = r383510 + r383514;
double r383516 = y;
double r383517 = 0.0007936500793651;
double r383518 = r383516 + r383517;
double r383519 = z;
double r383520 = r383518 * r383519;
double r383521 = 0.0027777777777778;
double r383522 = r383520 - r383521;
double r383523 = r383522 * r383519;
double r383524 = 0.083333333333333;
double r383525 = r383523 + r383524;
double r383526 = r383525 / r383502;
double r383527 = r383515 + r383526;
double r383528 = 2.0;
double r383529 = pow(r383519, r383528);
double r383530 = r383529 / r383502;
double r383531 = r383517 * r383530;
double r383532 = 1.0;
double r383533 = r383532 / r383502;
double r383534 = log(r383533);
double r383535 = fma(r383534, r383502, r383502);
double r383536 = r383531 - r383535;
double r383537 = fma(r383530, r383516, r383536);
double r383538 = r383504 ? r383527 : r383537;
return r383538;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 5.9 |
|---|---|
| Target | 1.0 |
| Herbie | 4.2 |
if x < 139847743809662.47Initial program 0.2
rmApplied add-cube-cbrt0.2
Applied log-prod0.2
Applied distribute-lft-in0.2
Applied associate--l+0.2
Applied associate-+l+0.2
Simplified0.2
if 139847743809662.47 < x Initial program 10.3
Simplified10.2
Taylor expanded around inf 10.4
Simplified7.1
Final simplification4.2
herbie shell --seed 2020002 +o rules:numerics
(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.91893853320467 x)) (/ 0.083333333333333 x)) (* (/ z x) (- (* z (+ y 0.0007936500793651)) 0.0027777777777778)))
(+ (+ (- (* (- x 0.5) (log x)) x) 0.91893853320467) (/ (+ (* (- (* (+ y 0.0007936500793651) z) 0.0027777777777778) z) 0.083333333333333) x)))