\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 1.0048655881704563 \cdot 10^{+85}:\\
\;\;\;\;\frac{0.083333333333333 + \left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z}{x} + \left(0.91893853320467 + \left(\log \left(\sqrt{x}\right) \cdot \left(x - 0.5\right) + \sqrt{\log \left(\sqrt{x}\right) \cdot \left(x - 0.5\right) - x} \cdot \sqrt{\log \left(\sqrt{x}\right) \cdot \left(x - 0.5\right) - x}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{0.083333333333333}{x} - \left(\frac{0.0027777777777778}{x} \cdot z - \frac{0.0007936500793651 \cdot z}{\frac{x}{z}}\right)\right) + \left(\left(\log \left(\sqrt{x}\right) \cdot \left(x - 0.5\right) + \left(\log \left(\sqrt{x}\right) \cdot \left(x - 0.5\right) - x\right)\right) + 0.91893853320467\right)\\
\end{array}double f(double x, double y, double z) {
double r21372930 = x;
double r21372931 = 0.5;
double r21372932 = r21372930 - r21372931;
double r21372933 = log(r21372930);
double r21372934 = r21372932 * r21372933;
double r21372935 = r21372934 - r21372930;
double r21372936 = 0.91893853320467;
double r21372937 = r21372935 + r21372936;
double r21372938 = y;
double r21372939 = 0.0007936500793651;
double r21372940 = r21372938 + r21372939;
double r21372941 = z;
double r21372942 = r21372940 * r21372941;
double r21372943 = 0.0027777777777778;
double r21372944 = r21372942 - r21372943;
double r21372945 = r21372944 * r21372941;
double r21372946 = 0.083333333333333;
double r21372947 = r21372945 + r21372946;
double r21372948 = r21372947 / r21372930;
double r21372949 = r21372937 + r21372948;
return r21372949;
}
double f(double x, double y, double z) {
double r21372950 = x;
double r21372951 = 1.0048655881704563e+85;
bool r21372952 = r21372950 <= r21372951;
double r21372953 = 0.083333333333333;
double r21372954 = y;
double r21372955 = 0.0007936500793651;
double r21372956 = r21372954 + r21372955;
double r21372957 = z;
double r21372958 = r21372956 * r21372957;
double r21372959 = 0.0027777777777778;
double r21372960 = r21372958 - r21372959;
double r21372961 = r21372960 * r21372957;
double r21372962 = r21372953 + r21372961;
double r21372963 = r21372962 / r21372950;
double r21372964 = 0.91893853320467;
double r21372965 = sqrt(r21372950);
double r21372966 = log(r21372965);
double r21372967 = 0.5;
double r21372968 = r21372950 - r21372967;
double r21372969 = r21372966 * r21372968;
double r21372970 = r21372969 - r21372950;
double r21372971 = sqrt(r21372970);
double r21372972 = r21372971 * r21372971;
double r21372973 = r21372969 + r21372972;
double r21372974 = r21372964 + r21372973;
double r21372975 = r21372963 + r21372974;
double r21372976 = r21372953 / r21372950;
double r21372977 = r21372959 / r21372950;
double r21372978 = r21372977 * r21372957;
double r21372979 = r21372955 * r21372957;
double r21372980 = r21372950 / r21372957;
double r21372981 = r21372979 / r21372980;
double r21372982 = r21372978 - r21372981;
double r21372983 = r21372976 - r21372982;
double r21372984 = r21372969 + r21372970;
double r21372985 = r21372984 + r21372964;
double r21372986 = r21372983 + r21372985;
double r21372987 = r21372952 ? r21372975 : r21372986;
return r21372987;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.7 |
|---|---|
| Target | 1.2 |
| Herbie | 2.4 |
if x < 1.0048655881704563e+85Initial program 0.7
rmApplied add-sqr-sqrt0.7
Applied log-prod0.7
Applied distribute-lft-in0.7
Applied associate--l+0.7
rmApplied add-sqr-sqrt1.1
if 1.0048655881704563e+85 < x Initial program 11.7
rmApplied add-sqr-sqrt11.7
Applied log-prod11.7
Applied distribute-lft-in11.7
Applied associate--l+11.7
Taylor expanded around 0 10.5
Simplified4.0
Final simplification2.4
herbie shell --seed 2019163
(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)))