\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:\\
\;\;\;\;\sqrt{\log x \cdot \left(x - 0.5\right) - x} \cdot \sqrt{\log x \cdot \left(x - 0.5\right) - x} + \left(\frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x} + 0.9189385332046700050057097541866824030876\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right) - x\right)\right) + \left(\left(\frac{z}{\frac{x}{z}} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) - \frac{z \cdot 0.002777777777777800001512975569539776188321}{x}\right) + 0.9189385332046700050057097541866824030876\right)\\
\end{array}double f(double x, double y, double z) {
double r400188 = x;
double r400189 = 0.5;
double r400190 = r400188 - r400189;
double r400191 = log(r400188);
double r400192 = r400190 * r400191;
double r400193 = r400192 - r400188;
double r400194 = 0.91893853320467;
double r400195 = r400193 + r400194;
double r400196 = y;
double r400197 = 0.0007936500793651;
double r400198 = r400196 + r400197;
double r400199 = z;
double r400200 = r400198 * r400199;
double r400201 = 0.0027777777777778;
double r400202 = r400200 - r400201;
double r400203 = r400202 * r400199;
double r400204 = 0.083333333333333;
double r400205 = r400203 + r400204;
double r400206 = r400205 / r400188;
double r400207 = r400195 + r400206;
return r400207;
}
double f(double x, double y, double z) {
double r400208 = x;
double r400209 = 4.856018666852463e+22;
bool r400210 = r400208 <= r400209;
double r400211 = log(r400208);
double r400212 = 0.5;
double r400213 = r400208 - r400212;
double r400214 = r400211 * r400213;
double r400215 = r400214 - r400208;
double r400216 = sqrt(r400215);
double r400217 = r400216 * r400216;
double r400218 = y;
double r400219 = 0.0007936500793651;
double r400220 = r400218 + r400219;
double r400221 = z;
double r400222 = r400220 * r400221;
double r400223 = 0.0027777777777778;
double r400224 = r400222 - r400223;
double r400225 = r400224 * r400221;
double r400226 = 0.083333333333333;
double r400227 = r400225 + r400226;
double r400228 = r400227 / r400208;
double r400229 = 0.91893853320467;
double r400230 = r400228 + r400229;
double r400231 = r400217 + r400230;
double r400232 = cbrt(r400208);
double r400233 = r400232 * r400232;
double r400234 = log(r400233);
double r400235 = r400234 * r400213;
double r400236 = log(r400232);
double r400237 = r400213 * r400236;
double r400238 = r400237 - r400208;
double r400239 = r400235 + r400238;
double r400240 = r400208 / r400221;
double r400241 = r400221 / r400240;
double r400242 = r400241 * r400220;
double r400243 = r400221 * r400223;
double r400244 = r400243 / r400208;
double r400245 = r400242 - r400244;
double r400246 = r400245 + r400229;
double r400247 = r400239 + r400246;
double r400248 = r400210 ? r400231 : r400247;
return r400248;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.2 |
|---|---|
| Target | 1.2 |
| Herbie | 0.5 |
if x < 4.856018666852463e+22Initial program 0.2
Simplified0.2
rmApplied add-sqr-sqrt0.5
Simplified0.5
Simplified0.5
if 4.856018666852463e+22 < x Initial program 11.2
Simplified11.2
rmApplied add-cube-cbrt11.2
Applied log-prod11.3
Applied distribute-lft-in11.3
Applied associate--l+11.2
Taylor expanded around inf 11.3
Simplified0.5
Final simplification0.5
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)))