\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467\right) + \frac{\left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.083333333333333}{x}\begin{array}{l}
\mathbf{if}\;x \le 2.663242591017173 \cdot 10^{+22}:\\
\;\;\;\;\frac{\mathsf{fma}\left(z, z \cdot \left(0.0007936500793651 + y\right) - 0.0027777777777778, 0.083333333333333\right)}{x} - \left(\sqrt{x} - \sqrt{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}\right) \cdot \left(\sqrt{x} + \sqrt{\sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)} \cdot \left(\sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}\right)}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(0.0007936500793651 + y\right) \cdot \frac{z \cdot z}{x} - 0.0027777777777778 \cdot \frac{z}{x}\right) - \left(\mathsf{fma}\left(-\log x, x - 0.5, x\right) - 0.91893853320467\right)\\
\end{array}double f(double x, double y, double z) {
double r18535802 = x;
double r18535803 = 0.5;
double r18535804 = r18535802 - r18535803;
double r18535805 = log(r18535802);
double r18535806 = r18535804 * r18535805;
double r18535807 = r18535806 - r18535802;
double r18535808 = 0.91893853320467;
double r18535809 = r18535807 + r18535808;
double r18535810 = y;
double r18535811 = 0.0007936500793651;
double r18535812 = r18535810 + r18535811;
double r18535813 = z;
double r18535814 = r18535812 * r18535813;
double r18535815 = 0.0027777777777778;
double r18535816 = r18535814 - r18535815;
double r18535817 = r18535816 * r18535813;
double r18535818 = 0.083333333333333;
double r18535819 = r18535817 + r18535818;
double r18535820 = r18535819 / r18535802;
double r18535821 = r18535809 + r18535820;
return r18535821;
}
double f(double x, double y, double z) {
double r18535822 = x;
double r18535823 = 2.663242591017173e+22;
bool r18535824 = r18535822 <= r18535823;
double r18535825 = z;
double r18535826 = 0.0007936500793651;
double r18535827 = y;
double r18535828 = r18535826 + r18535827;
double r18535829 = r18535825 * r18535828;
double r18535830 = 0.0027777777777778;
double r18535831 = r18535829 - r18535830;
double r18535832 = 0.083333333333333;
double r18535833 = fma(r18535825, r18535831, r18535832);
double r18535834 = r18535833 / r18535822;
double r18535835 = sqrt(r18535822);
double r18535836 = log(r18535822);
double r18535837 = 0.5;
double r18535838 = r18535822 - r18535837;
double r18535839 = 0.91893853320467;
double r18535840 = fma(r18535836, r18535838, r18535839);
double r18535841 = sqrt(r18535840);
double r18535842 = r18535835 - r18535841;
double r18535843 = cbrt(r18535840);
double r18535844 = r18535843 * r18535843;
double r18535845 = r18535843 * r18535844;
double r18535846 = sqrt(r18535845);
double r18535847 = r18535835 + r18535846;
double r18535848 = r18535842 * r18535847;
double r18535849 = r18535834 - r18535848;
double r18535850 = r18535825 * r18535825;
double r18535851 = r18535850 / r18535822;
double r18535852 = r18535828 * r18535851;
double r18535853 = r18535825 / r18535822;
double r18535854 = r18535830 * r18535853;
double r18535855 = r18535852 - r18535854;
double r18535856 = -r18535836;
double r18535857 = fma(r18535856, r18535838, r18535822);
double r18535858 = r18535857 - r18535839;
double r18535859 = r18535855 - r18535858;
double r18535860 = r18535824 ? r18535849 : r18535859;
return r18535860;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 5.6 |
|---|---|
| Target | 1.1 |
| Herbie | 3.6 |
if x < 2.663242591017173e+22Initial program 0.2
Simplified0.2
rmApplied add-sqr-sqrt0.2
Applied add-sqr-sqrt0.2
Applied difference-of-squares0.2
rmApplied add-cube-cbrt0.2
if 2.663242591017173e+22 < x Initial program 10.1
Simplified10.1
Taylor expanded around inf 10.1
Simplified10.1
Taylor expanded around inf 10.1
Simplified6.4
Final simplification3.6
herbie shell --seed 2019168 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:$slogFactorial from math-functions-0.1.5.2, B"
: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)))