\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 1.176380466602636012645528110948300751537 \cdot 10^{89}:\\
\;\;\;\;\left(\left(\left(\left(x - 0.5\right) \cdot \left(2 \cdot \log \left(\sqrt[3]{x}\right)\right) + \log \left(\sqrt[3]{x}\right) \cdot \left(x - 0.5\right)\right) - 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}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \frac{1}{12.00000000000004796163466380676254630089 \cdot x + x \cdot \left(z \cdot 0.4000000000000064059868520871532382443547 - {z}^{2} \cdot 0.1009522780952416126654114236771420110017\right)}\\
\end{array}double f(double x, double y, double z) {
double r302556 = x;
double r302557 = 0.5;
double r302558 = r302556 - r302557;
double r302559 = log(r302556);
double r302560 = r302558 * r302559;
double r302561 = r302560 - r302556;
double r302562 = 0.91893853320467;
double r302563 = r302561 + r302562;
double r302564 = y;
double r302565 = 0.0007936500793651;
double r302566 = r302564 + r302565;
double r302567 = z;
double r302568 = r302566 * r302567;
double r302569 = 0.0027777777777778;
double r302570 = r302568 - r302569;
double r302571 = r302570 * r302567;
double r302572 = 0.083333333333333;
double r302573 = r302571 + r302572;
double r302574 = r302573 / r302556;
double r302575 = r302563 + r302574;
return r302575;
}
double f(double x, double y, double z) {
double r302576 = x;
double r302577 = 1.176380466602636e+89;
bool r302578 = r302576 <= r302577;
double r302579 = 0.5;
double r302580 = r302576 - r302579;
double r302581 = 2.0;
double r302582 = cbrt(r302576);
double r302583 = log(r302582);
double r302584 = r302581 * r302583;
double r302585 = r302580 * r302584;
double r302586 = r302583 * r302580;
double r302587 = r302585 + r302586;
double r302588 = r302587 - r302576;
double r302589 = 0.91893853320467;
double r302590 = r302588 + r302589;
double r302591 = y;
double r302592 = 0.0007936500793651;
double r302593 = r302591 + r302592;
double r302594 = z;
double r302595 = r302593 * r302594;
double r302596 = 0.0027777777777778;
double r302597 = r302595 - r302596;
double r302598 = r302597 * r302594;
double r302599 = 0.083333333333333;
double r302600 = r302598 + r302599;
double r302601 = r302600 / r302576;
double r302602 = r302590 + r302601;
double r302603 = log(r302576);
double r302604 = r302580 * r302603;
double r302605 = r302604 - r302576;
double r302606 = r302605 + r302589;
double r302607 = 1.0;
double r302608 = 12.000000000000048;
double r302609 = r302608 * r302576;
double r302610 = 0.4000000000000064;
double r302611 = r302594 * r302610;
double r302612 = pow(r302594, r302581);
double r302613 = 0.10095227809524161;
double r302614 = r302612 * r302613;
double r302615 = r302611 - r302614;
double r302616 = r302576 * r302615;
double r302617 = r302609 + r302616;
double r302618 = r302607 / r302617;
double r302619 = r302606 + r302618;
double r302620 = r302578 ? r302602 : r302619;
return r302620;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.0 |
|---|---|
| Target | 1.2 |
| Herbie | 3.7 |
if x < 1.176380466602636e+89Initial program 0.9
rmApplied add-cube-cbrt0.9
Applied log-prod1.0
Applied distribute-lft-in1.0
Simplified1.0
Simplified1.0
if 1.176380466602636e+89 < x Initial program 12.3
rmApplied clear-num12.3
Taylor expanded around 0 12.0
Simplified7.0
Final simplification3.7
herbie shell --seed 2019326
(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)))