\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467\right) + \frac{\left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.083333333333333}{x}\begin{array}{l}
\mathbf{if}\;x \le 16108315.755668392:\\
\;\;\;\;\sqrt{\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467} \cdot \sqrt{\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467} + \frac{0.083333333333333 + \left(z \cdot \left(y + 0.0007936500793651\right) - 0.0027777777777778\right) \cdot z}{x}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(y + 0.0007936500793651\right) \cdot \left(\frac{z}{x} \cdot z\right) - 0.0027777777777778 \cdot \frac{z}{x}\right) + \left(\left(x - 0.5\right) \cdot \log \left(\sqrt{x}\right) + \left(\log \left(\sqrt[3]{\sqrt{x}} \cdot \sqrt[3]{\sqrt{x}}\right) \cdot \left(x - 0.5\right) + \left(0.91893853320467 + \left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{\sqrt{x}}\right) - x\right)\right)\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r22799518 = x;
double r22799519 = 0.5;
double r22799520 = r22799518 - r22799519;
double r22799521 = log(r22799518);
double r22799522 = r22799520 * r22799521;
double r22799523 = r22799522 - r22799518;
double r22799524 = 0.91893853320467;
double r22799525 = r22799523 + r22799524;
double r22799526 = y;
double r22799527 = 0.0007936500793651;
double r22799528 = r22799526 + r22799527;
double r22799529 = z;
double r22799530 = r22799528 * r22799529;
double r22799531 = 0.0027777777777778;
double r22799532 = r22799530 - r22799531;
double r22799533 = r22799532 * r22799529;
double r22799534 = 0.083333333333333;
double r22799535 = r22799533 + r22799534;
double r22799536 = r22799535 / r22799518;
double r22799537 = r22799525 + r22799536;
return r22799537;
}
double f(double x, double y, double z) {
double r22799538 = x;
double r22799539 = 16108315.755668392;
bool r22799540 = r22799538 <= r22799539;
double r22799541 = 0.5;
double r22799542 = r22799538 - r22799541;
double r22799543 = log(r22799538);
double r22799544 = r22799542 * r22799543;
double r22799545 = r22799544 - r22799538;
double r22799546 = 0.91893853320467;
double r22799547 = r22799545 + r22799546;
double r22799548 = sqrt(r22799547);
double r22799549 = r22799548 * r22799548;
double r22799550 = 0.083333333333333;
double r22799551 = z;
double r22799552 = y;
double r22799553 = 0.0007936500793651;
double r22799554 = r22799552 + r22799553;
double r22799555 = r22799551 * r22799554;
double r22799556 = 0.0027777777777778;
double r22799557 = r22799555 - r22799556;
double r22799558 = r22799557 * r22799551;
double r22799559 = r22799550 + r22799558;
double r22799560 = r22799559 / r22799538;
double r22799561 = r22799549 + r22799560;
double r22799562 = r22799551 / r22799538;
double r22799563 = r22799562 * r22799551;
double r22799564 = r22799554 * r22799563;
double r22799565 = r22799556 * r22799562;
double r22799566 = r22799564 - r22799565;
double r22799567 = sqrt(r22799538);
double r22799568 = log(r22799567);
double r22799569 = r22799542 * r22799568;
double r22799570 = cbrt(r22799567);
double r22799571 = r22799570 * r22799570;
double r22799572 = log(r22799571);
double r22799573 = r22799572 * r22799542;
double r22799574 = log(r22799570);
double r22799575 = r22799542 * r22799574;
double r22799576 = r22799575 - r22799538;
double r22799577 = r22799546 + r22799576;
double r22799578 = r22799573 + r22799577;
double r22799579 = r22799569 + r22799578;
double r22799580 = r22799566 + r22799579;
double r22799581 = r22799540 ? r22799561 : r22799580;
return r22799581;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.9 |
|---|---|
| Target | 1.1 |
| Herbie | 0.4 |
if x < 16108315.755668392Initial program 0.1
rmApplied add-sqr-sqrt0.2
if 16108315.755668392 < x Initial program 10.1
rmApplied add-sqr-sqrt10.1
Applied log-prod10.1
Applied distribute-lft-in10.1
Applied associate--l+10.2
Applied associate-+l+10.2
rmApplied add-cube-cbrt10.2
Applied log-prod10.2
Applied distribute-lft-in10.1
Applied associate--l+10.1
Applied associate-+l+10.1
Taylor expanded around inf 10.2
Simplified0.4
Final simplification0.4
herbie shell --seed 2019162
(FPCore (x y z)
:name "Numeric.SpecFunctions:$slogFactorial from math-functions-0.1.5.2, B"
: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)))