\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 48560186668524628869120:\\
\;\;\;\;\left(\sqrt{\left(x - 0.5\right) \cdot \log x - x} \cdot \sqrt{\left(x - 0.5\right) \cdot \log x - x} + 0.9189385332046700050057097541866824030876\right) + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\\
\mathbf{else}:\\
\;\;\;\;\left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \left(\left(\log \left(\sqrt[3]{x}\right) \cdot \left(x - 0.5\right) - x\right) + 0.9189385332046700050057097541866824030876\right)\right) + \left(\frac{z \cdot z}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) - 0.002777777777777800001512975569539776188321 \cdot \frac{z}{x}\right)\\
\end{array}double f(double x, double y, double z) {
double r31669010 = x;
double r31669011 = 0.5;
double r31669012 = r31669010 - r31669011;
double r31669013 = log(r31669010);
double r31669014 = r31669012 * r31669013;
double r31669015 = r31669014 - r31669010;
double r31669016 = 0.91893853320467;
double r31669017 = r31669015 + r31669016;
double r31669018 = y;
double r31669019 = 0.0007936500793651;
double r31669020 = r31669018 + r31669019;
double r31669021 = z;
double r31669022 = r31669020 * r31669021;
double r31669023 = 0.0027777777777778;
double r31669024 = r31669022 - r31669023;
double r31669025 = r31669024 * r31669021;
double r31669026 = 0.083333333333333;
double r31669027 = r31669025 + r31669026;
double r31669028 = r31669027 / r31669010;
double r31669029 = r31669017 + r31669028;
return r31669029;
}
double f(double x, double y, double z) {
double r31669030 = x;
double r31669031 = 4.856018666852463e+22;
bool r31669032 = r31669030 <= r31669031;
double r31669033 = 0.5;
double r31669034 = r31669030 - r31669033;
double r31669035 = log(r31669030);
double r31669036 = r31669034 * r31669035;
double r31669037 = r31669036 - r31669030;
double r31669038 = sqrt(r31669037);
double r31669039 = r31669038 * r31669038;
double r31669040 = 0.91893853320467;
double r31669041 = r31669039 + r31669040;
double r31669042 = y;
double r31669043 = 0.0007936500793651;
double r31669044 = r31669042 + r31669043;
double r31669045 = z;
double r31669046 = r31669044 * r31669045;
double r31669047 = 0.0027777777777778;
double r31669048 = r31669046 - r31669047;
double r31669049 = r31669048 * r31669045;
double r31669050 = 0.083333333333333;
double r31669051 = r31669049 + r31669050;
double r31669052 = r31669051 / r31669030;
double r31669053 = r31669041 + r31669052;
double r31669054 = cbrt(r31669030);
double r31669055 = r31669054 * r31669054;
double r31669056 = log(r31669055);
double r31669057 = r31669056 * r31669034;
double r31669058 = log(r31669054);
double r31669059 = r31669058 * r31669034;
double r31669060 = r31669059 - r31669030;
double r31669061 = r31669060 + r31669040;
double r31669062 = r31669057 + r31669061;
double r31669063 = r31669045 * r31669045;
double r31669064 = r31669063 / r31669030;
double r31669065 = r31669064 * r31669044;
double r31669066 = r31669045 / r31669030;
double r31669067 = r31669047 * r31669066;
double r31669068 = r31669065 - r31669067;
double r31669069 = r31669062 + r31669068;
double r31669070 = r31669032 ? r31669053 : r31669069;
return r31669070;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.2 |
|---|---|
| Target | 1.2 |
| Herbie | 4.4 |
if x < 4.856018666852463e+22Initial program 0.2
rmApplied add-sqr-sqrt0.5
if 4.856018666852463e+22 < x Initial program 11.2
rmApplied add-cube-cbrt11.2
Applied log-prod11.3
Applied distribute-rgt-in11.3
Applied associate--l+11.2
Applied associate-+l+11.2
Taylor expanded around inf 11.3
Simplified7.6
Final simplification4.4
herbie shell --seed 2019174
(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)))