\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\begin{array}{l}
\mathbf{if}\;x \le 1.40851047968568016 \cdot 10^{69}:\\
\;\;\;\;\left(\sqrt{\left(x - 0.5\right) \cdot \left(2 \cdot \log \left(\sqrt[3]{\sqrt{x}}\right)\right) + \left(x - 0.5\right) \cdot \log \left(\sqrt[3]{\sqrt{x}}\right)} \cdot \sqrt{\left(x - 0.5\right) \cdot \left(2 \cdot \log \left(\sqrt[3]{\sqrt{x}}\right)\right) + \left(x - 0.5\right) \cdot \log \left(\sqrt[3]{\sqrt{x}}\right)} + \left(\left(\log \left(\sqrt{x}\right) \cdot \left(x - 0.5\right) - x\right) + 0.91893853320467001\right)\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467001\right) + \left(\left(7.93650079365100015 \cdot 10^{-4} \cdot \frac{{z}^{2}}{x} + 0.0833333333333329956 \cdot \frac{1}{x}\right) - 0.0027777777777778 \cdot \frac{z}{x}\right)\\
\end{array}double f(double x, double y, double z) {
double r486661 = x;
double r486662 = 0.5;
double r486663 = r486661 - r486662;
double r486664 = log(r486661);
double r486665 = r486663 * r486664;
double r486666 = r486665 - r486661;
double r486667 = 0.91893853320467;
double r486668 = r486666 + r486667;
double r486669 = y;
double r486670 = 0.0007936500793651;
double r486671 = r486669 + r486670;
double r486672 = z;
double r486673 = r486671 * r486672;
double r486674 = 0.0027777777777778;
double r486675 = r486673 - r486674;
double r486676 = r486675 * r486672;
double r486677 = 0.083333333333333;
double r486678 = r486676 + r486677;
double r486679 = r486678 / r486661;
double r486680 = r486668 + r486679;
return r486680;
}
double f(double x, double y, double z) {
double r486681 = x;
double r486682 = 1.4085104796856802e+69;
bool r486683 = r486681 <= r486682;
double r486684 = 0.5;
double r486685 = r486681 - r486684;
double r486686 = 2.0;
double r486687 = sqrt(r486681);
double r486688 = cbrt(r486687);
double r486689 = log(r486688);
double r486690 = r486686 * r486689;
double r486691 = r486685 * r486690;
double r486692 = r486685 * r486689;
double r486693 = r486691 + r486692;
double r486694 = sqrt(r486693);
double r486695 = r486694 * r486694;
double r486696 = log(r486687);
double r486697 = r486696 * r486685;
double r486698 = r486697 - r486681;
double r486699 = 0.91893853320467;
double r486700 = r486698 + r486699;
double r486701 = r486695 + r486700;
double r486702 = y;
double r486703 = 0.0007936500793651;
double r486704 = r486702 + r486703;
double r486705 = z;
double r486706 = r486704 * r486705;
double r486707 = 0.0027777777777778;
double r486708 = r486706 - r486707;
double r486709 = r486708 * r486705;
double r486710 = 0.083333333333333;
double r486711 = r486709 + r486710;
double r486712 = r486711 / r486681;
double r486713 = r486701 + r486712;
double r486714 = log(r486681);
double r486715 = r486685 * r486714;
double r486716 = r486715 - r486681;
double r486717 = r486716 + r486699;
double r486718 = pow(r486705, r486686);
double r486719 = r486718 / r486681;
double r486720 = r486703 * r486719;
double r486721 = 1.0;
double r486722 = r486721 / r486681;
double r486723 = r486710 * r486722;
double r486724 = r486720 + r486723;
double r486725 = r486705 / r486681;
double r486726 = r486707 * r486725;
double r486727 = r486724 - r486726;
double r486728 = r486717 + r486727;
double r486729 = r486683 ? r486713 : r486728;
return r486729;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.0 |
|---|---|
| Target | 1.3 |
| Herbie | 5.4 |
if x < 1.4085104796856802e+69Initial program 0.9
rmApplied add-sqr-sqrt0.9
Applied log-prod0.9
Applied distribute-lft-in0.9
Applied associate--l+0.9
Applied associate-+l+0.9
Simplified0.9
rmApplied add-cube-cbrt0.9
Applied log-prod0.9
Applied distribute-lft-in0.9
Simplified0.9
rmApplied add-sqr-sqrt1.0
if 1.4085104796856802e+69 < x Initial program 11.8
Taylor expanded around 0 10.6
Final simplification5.4
herbie shell --seed 2020018
(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)))