\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 7.263854719572082816566026214772921468835 \cdot 10^{135}:\\
\;\;\;\;\left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) + \left(\left(\log \left({\left({\left(\frac{1}{x}\right)}^{\left(\sqrt[3]{\frac{-1}{3}} \cdot \sqrt[3]{\frac{-1}{3}}\right)}\right)}^{\left(\sqrt[3]{\frac{-1}{3}}\right)}\right) \cdot \left(x - 0.5\right) - x\right) + 0.9189385332046700050057097541866824030876\right)\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(x - 0.5\right) \cdot \log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) + \left(\left(\log \left(\sqrt[3]{x}\right) \cdot \left(x - 0.5\right) - x\right) + 0.9189385332046700050057097541866824030876\right)\right) + \left(\left(7.936500793651000149400709382518925849581 \cdot 10^{-4} \cdot \frac{{z}^{2}}{x} - 0.002777777777777800001512975569539776188321 \cdot \frac{z}{x}\right) + \frac{0.08333333333333299564049667651488562114537}{x}\right)\\
\end{array}double f(double x, double y, double z) {
double r493502 = x;
double r493503 = 0.5;
double r493504 = r493502 - r493503;
double r493505 = log(r493502);
double r493506 = r493504 * r493505;
double r493507 = r493506 - r493502;
double r493508 = 0.91893853320467;
double r493509 = r493507 + r493508;
double r493510 = y;
double r493511 = 0.0007936500793651;
double r493512 = r493510 + r493511;
double r493513 = z;
double r493514 = r493512 * r493513;
double r493515 = 0.0027777777777778;
double r493516 = r493514 - r493515;
double r493517 = r493516 * r493513;
double r493518 = 0.083333333333333;
double r493519 = r493517 + r493518;
double r493520 = r493519 / r493502;
double r493521 = r493509 + r493520;
return r493521;
}
double f(double x, double y, double z) {
double r493522 = x;
double r493523 = 7.263854719572083e+135;
bool r493524 = r493522 <= r493523;
double r493525 = 0.5;
double r493526 = r493522 - r493525;
double r493527 = cbrt(r493522);
double r493528 = r493527 * r493527;
double r493529 = log(r493528);
double r493530 = r493526 * r493529;
double r493531 = 1.0;
double r493532 = r493531 / r493522;
double r493533 = -0.3333333333333333;
double r493534 = cbrt(r493533);
double r493535 = r493534 * r493534;
double r493536 = pow(r493532, r493535);
double r493537 = pow(r493536, r493534);
double r493538 = log(r493537);
double r493539 = r493538 * r493526;
double r493540 = r493539 - r493522;
double r493541 = 0.91893853320467;
double r493542 = r493540 + r493541;
double r493543 = r493530 + r493542;
double r493544 = y;
double r493545 = 0.0007936500793651;
double r493546 = r493544 + r493545;
double r493547 = z;
double r493548 = r493546 * r493547;
double r493549 = 0.0027777777777778;
double r493550 = r493548 - r493549;
double r493551 = r493550 * r493547;
double r493552 = 0.083333333333333;
double r493553 = r493551 + r493552;
double r493554 = r493553 / r493522;
double r493555 = r493543 + r493554;
double r493556 = log(r493527);
double r493557 = r493556 * r493526;
double r493558 = r493557 - r493522;
double r493559 = r493558 + r493541;
double r493560 = r493530 + r493559;
double r493561 = 2.0;
double r493562 = pow(r493547, r493561);
double r493563 = r493562 / r493522;
double r493564 = r493545 * r493563;
double r493565 = r493547 / r493522;
double r493566 = r493549 * r493565;
double r493567 = r493564 - r493566;
double r493568 = r493552 / r493522;
double r493569 = r493567 + r493568;
double r493570 = r493560 + r493569;
double r493571 = r493524 ? r493555 : r493570;
return r493571;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.9 |
|---|---|
| Target | 1.2 |
| Herbie | 5.0 |
if x < 7.263854719572083e+135Initial program 2.0
rmApplied add-cube-cbrt2.0
Applied log-prod2.0
Applied distribute-lft-in2.0
Applied associate--l+2.0
Applied associate-+l+2.0
Simplified2.0
Taylor expanded around inf 1.9
rmApplied add-cube-cbrt2.0
Applied pow-unpow2.0
if 7.263854719572083e+135 < x Initial program 13.4
rmApplied add-cube-cbrt13.4
Applied log-prod13.4
Applied distribute-lft-in13.4
Applied associate--l+13.4
Applied associate-+l+13.4
Simplified13.4
Taylor expanded around 0 10.9
Simplified10.9
Final simplification5.0
herbie shell --seed 2019353
(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)))