\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({x}^{\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 r580684 = x;
double r580685 = 0.5;
double r580686 = r580684 - r580685;
double r580687 = log(r580684);
double r580688 = r580686 * r580687;
double r580689 = r580688 - r580684;
double r580690 = 0.91893853320467;
double r580691 = r580689 + r580690;
double r580692 = y;
double r580693 = 0.0007936500793651;
double r580694 = r580692 + r580693;
double r580695 = z;
double r580696 = r580694 * r580695;
double r580697 = 0.0027777777777778;
double r580698 = r580696 - r580697;
double r580699 = r580698 * r580695;
double r580700 = 0.083333333333333;
double r580701 = r580699 + r580700;
double r580702 = r580701 / r580684;
double r580703 = r580691 + r580702;
return r580703;
}
double f(double x, double y, double z) {
double r580704 = x;
double r580705 = 7.263854719572083e+135;
bool r580706 = r580704 <= r580705;
double r580707 = 0.5;
double r580708 = r580704 - r580707;
double r580709 = cbrt(r580704);
double r580710 = r580709 * r580709;
double r580711 = log(r580710);
double r580712 = r580708 * r580711;
double r580713 = 0.3333333333333333;
double r580714 = cbrt(r580713);
double r580715 = r580714 * r580714;
double r580716 = pow(r580704, r580715);
double r580717 = pow(r580716, r580714);
double r580718 = log(r580717);
double r580719 = r580718 * r580708;
double r580720 = r580719 - r580704;
double r580721 = 0.91893853320467;
double r580722 = r580720 + r580721;
double r580723 = r580712 + r580722;
double r580724 = y;
double r580725 = 0.0007936500793651;
double r580726 = r580724 + r580725;
double r580727 = z;
double r580728 = r580726 * r580727;
double r580729 = 0.0027777777777778;
double r580730 = r580728 - r580729;
double r580731 = r580730 * r580727;
double r580732 = 0.083333333333333;
double r580733 = r580731 + r580732;
double r580734 = r580733 / r580704;
double r580735 = r580723 + r580734;
double r580736 = log(r580709);
double r580737 = r580736 * r580708;
double r580738 = r580737 - r580704;
double r580739 = r580738 + r580721;
double r580740 = r580712 + r580739;
double r580741 = 2.0;
double r580742 = pow(r580727, r580741);
double r580743 = r580742 / r580704;
double r580744 = r580725 * r580743;
double r580745 = r580727 / r580704;
double r580746 = r580729 * r580745;
double r580747 = r580744 - r580746;
double r580748 = r580732 / r580704;
double r580749 = r580747 + r580748;
double r580750 = r580740 + r580749;
double r580751 = r580706 ? r580735 : r580750;
return r580751;
}




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
rmApplied pow1/31.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)))