\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.55935694262055325 \cdot 10^{121}:\\
\;\;\;\;\left(\left(x - 0.5\right) \cdot \log \left(\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 r420801 = x;
double r420802 = 0.5;
double r420803 = r420801 - r420802;
double r420804 = log(r420801);
double r420805 = r420803 * r420804;
double r420806 = r420805 - r420801;
double r420807 = 0.91893853320467;
double r420808 = r420806 + r420807;
double r420809 = y;
double r420810 = 0.0007936500793651;
double r420811 = r420809 + r420810;
double r420812 = z;
double r420813 = r420811 * r420812;
double r420814 = 0.0027777777777778;
double r420815 = r420813 - r420814;
double r420816 = r420815 * r420812;
double r420817 = 0.083333333333333;
double r420818 = r420816 + r420817;
double r420819 = r420818 / r420801;
double r420820 = r420808 + r420819;
return r420820;
}
double f(double x, double y, double z) {
double r420821 = x;
double r420822 = 1.5593569426205532e+121;
bool r420823 = r420821 <= r420822;
double r420824 = 0.5;
double r420825 = r420821 - r420824;
double r420826 = sqrt(r420821);
double r420827 = log(r420826);
double r420828 = r420825 * r420827;
double r420829 = r420827 * r420825;
double r420830 = r420829 - r420821;
double r420831 = 0.91893853320467;
double r420832 = r420830 + r420831;
double r420833 = r420828 + r420832;
double r420834 = y;
double r420835 = 0.0007936500793651;
double r420836 = r420834 + r420835;
double r420837 = z;
double r420838 = r420836 * r420837;
double r420839 = 0.0027777777777778;
double r420840 = r420838 - r420839;
double r420841 = r420840 * r420837;
double r420842 = 0.083333333333333;
double r420843 = r420841 + r420842;
double r420844 = r420843 / r420821;
double r420845 = r420833 + r420844;
double r420846 = log(r420821);
double r420847 = r420825 * r420846;
double r420848 = r420847 - r420821;
double r420849 = r420848 + r420831;
double r420850 = 2.0;
double r420851 = pow(r420837, r420850);
double r420852 = r420851 / r420821;
double r420853 = r420835 * r420852;
double r420854 = 1.0;
double r420855 = r420854 / r420821;
double r420856 = r420842 * r420855;
double r420857 = r420853 + r420856;
double r420858 = r420837 / r420821;
double r420859 = r420839 * r420858;
double r420860 = r420857 - r420859;
double r420861 = r420849 + r420860;
double r420862 = r420823 ? r420845 : r420861;
return r420862;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.2 |
|---|---|
| Target | 1.2 |
| Herbie | 5.3 |
if x < 1.5593569426205532e+121Initial program 1.7
rmApplied add-sqr-sqrt1.7
Applied log-prod1.7
Applied distribute-lft-in1.7
Applied associate--l+1.7
Applied associate-+l+1.7
Simplified1.7
if 1.5593569426205532e+121 < x Initial program 13.8
Taylor expanded around 0 11.4
Final simplification5.3
herbie shell --seed 2020036
(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)))