\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}\;z \le -18206639466674118656:\\
\;\;\;\;\left(0.9189385332046700050057097541866824030876 + \left(\left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right) + \left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right) + \left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right)\right)\right) - x\right)\right) + \left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot \frac{z}{\frac{x}{z}} - \frac{z \cdot 0.002777777777777800001512975569539776188321}{x}\right)\\
\mathbf{elif}\;z \le 5.256216319270169315831795453690469448551 \cdot 10^{-14}:\\
\;\;\;\;\left(\left(\left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right) + \left(\left(x - 0.5\right) \cdot \log \left({x}^{\frac{1}{3}}\right) + \left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right)\right)\right) - x\right) + 0.9189385332046700050057097541866824030876\right) + \frac{0.08333333333333299564049667651488562114537 + \left(z \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) - 0.002777777777777800001512975569539776188321\right) \cdot z}{x}\\
\mathbf{else}:\\
\;\;\;\;\left(0.9189385332046700050057097541866824030876 + \left(\left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right) + \left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right) + \left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right)\right)\right) - x\right)\right) + \left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot \frac{z}{\frac{x}{z}} - \frac{z \cdot 0.002777777777777800001512975569539776188321}{x}\right)\\
\end{array}double f(double x, double y, double z) {
double r19828031 = x;
double r19828032 = 0.5;
double r19828033 = r19828031 - r19828032;
double r19828034 = log(r19828031);
double r19828035 = r19828033 * r19828034;
double r19828036 = r19828035 - r19828031;
double r19828037 = 0.91893853320467;
double r19828038 = r19828036 + r19828037;
double r19828039 = y;
double r19828040 = 0.0007936500793651;
double r19828041 = r19828039 + r19828040;
double r19828042 = z;
double r19828043 = r19828041 * r19828042;
double r19828044 = 0.0027777777777778;
double r19828045 = r19828043 - r19828044;
double r19828046 = r19828045 * r19828042;
double r19828047 = 0.083333333333333;
double r19828048 = r19828046 + r19828047;
double r19828049 = r19828048 / r19828031;
double r19828050 = r19828038 + r19828049;
return r19828050;
}
double f(double x, double y, double z) {
double r19828051 = z;
double r19828052 = -1.8206639466674119e+19;
bool r19828053 = r19828051 <= r19828052;
double r19828054 = 0.91893853320467;
double r19828055 = x;
double r19828056 = 0.5;
double r19828057 = r19828055 - r19828056;
double r19828058 = cbrt(r19828055);
double r19828059 = log(r19828058);
double r19828060 = r19828057 * r19828059;
double r19828061 = r19828060 + r19828060;
double r19828062 = r19828060 + r19828061;
double r19828063 = r19828062 - r19828055;
double r19828064 = r19828054 + r19828063;
double r19828065 = y;
double r19828066 = 0.0007936500793651;
double r19828067 = r19828065 + r19828066;
double r19828068 = r19828055 / r19828051;
double r19828069 = r19828051 / r19828068;
double r19828070 = r19828067 * r19828069;
double r19828071 = 0.0027777777777778;
double r19828072 = r19828051 * r19828071;
double r19828073 = r19828072 / r19828055;
double r19828074 = r19828070 - r19828073;
double r19828075 = r19828064 + r19828074;
double r19828076 = 5.2562163192701693e-14;
bool r19828077 = r19828051 <= r19828076;
double r19828078 = 0.3333333333333333;
double r19828079 = pow(r19828055, r19828078);
double r19828080 = log(r19828079);
double r19828081 = r19828057 * r19828080;
double r19828082 = r19828081 + r19828060;
double r19828083 = r19828060 + r19828082;
double r19828084 = r19828083 - r19828055;
double r19828085 = r19828084 + r19828054;
double r19828086 = 0.083333333333333;
double r19828087 = r19828051 * r19828067;
double r19828088 = r19828087 - r19828071;
double r19828089 = r19828088 * r19828051;
double r19828090 = r19828086 + r19828089;
double r19828091 = r19828090 / r19828055;
double r19828092 = r19828085 + r19828091;
double r19828093 = r19828077 ? r19828092 : r19828075;
double r19828094 = r19828053 ? r19828075 : r19828093;
return r19828094;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.0 |
|---|---|
| Target | 1.2 |
| Herbie | 0.7 |
if z < -1.8206639466674119e+19 or 5.2562163192701693e-14 < z Initial program 20.4
rmApplied add-cube-cbrt20.4
Applied log-prod20.4
Applied distribute-rgt-in20.4
Simplified20.4
Taylor expanded around inf 21.7
Simplified1.6
if -1.8206639466674119e+19 < z < 5.2562163192701693e-14Initial program 0.2
rmApplied add-cube-cbrt0.2
Applied log-prod0.3
Applied distribute-rgt-in0.3
Simplified0.3
rmApplied pow1/30.3
Final simplification0.7
herbie shell --seed 2019192
(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)))