\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 1.488526281610515453770934858449448718954 \cdot 10^{82}:\\
\;\;\;\;\left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \frac{1}{\frac{x}{\mathsf{fma}\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321, z, 0.08333333333333299564049667651488562114537\right)}}\right)\right) - x\\
\mathbf{else}:\\
\;\;\;\;\left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \mathsf{fma}\left(0.002777777777777800001512975569539776188321, -\frac{z}{x}, \frac{{z}^{2}}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right)\right)\right)\right) - x\\
\end{array}double f(double x, double y, double z) {
double r266260 = x;
double r266261 = 0.5;
double r266262 = r266260 - r266261;
double r266263 = log(r266260);
double r266264 = r266262 * r266263;
double r266265 = r266264 - r266260;
double r266266 = 0.91893853320467;
double r266267 = r266265 + r266266;
double r266268 = y;
double r266269 = 0.0007936500793651;
double r266270 = r266268 + r266269;
double r266271 = z;
double r266272 = r266270 * r266271;
double r266273 = 0.0027777777777778;
double r266274 = r266272 - r266273;
double r266275 = r266274 * r266271;
double r266276 = 0.083333333333333;
double r266277 = r266275 + r266276;
double r266278 = r266277 / r266260;
double r266279 = r266267 + r266278;
return r266279;
}
double f(double x, double y, double z) {
double r266280 = x;
double r266281 = 1.4885262816105155e+82;
bool r266282 = r266280 <= r266281;
double r266283 = 0.91893853320467;
double r266284 = log(r266280);
double r266285 = 0.5;
double r266286 = r266280 - r266285;
double r266287 = 1.0;
double r266288 = y;
double r266289 = 0.0007936500793651;
double r266290 = r266288 + r266289;
double r266291 = z;
double r266292 = r266290 * r266291;
double r266293 = 0.0027777777777778;
double r266294 = r266292 - r266293;
double r266295 = 0.083333333333333;
double r266296 = fma(r266294, r266291, r266295);
double r266297 = r266280 / r266296;
double r266298 = r266287 / r266297;
double r266299 = fma(r266284, r266286, r266298);
double r266300 = r266283 + r266299;
double r266301 = r266300 - r266280;
double r266302 = r266291 / r266280;
double r266303 = -r266302;
double r266304 = 2.0;
double r266305 = pow(r266291, r266304);
double r266306 = r266305 / r266280;
double r266307 = r266306 * r266290;
double r266308 = fma(r266293, r266303, r266307);
double r266309 = fma(r266284, r266286, r266308);
double r266310 = r266283 + r266309;
double r266311 = r266310 - r266280;
double r266312 = r266282 ? r266301 : r266311;
return r266312;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 6.1 |
|---|---|
| Target | 1.2 |
| Herbie | 4.6 |
if x < 1.4885262816105155e+82Initial program 0.8
Simplified0.8
rmApplied clear-num1.0
if 1.4885262816105155e+82 < x Initial program 12.6
Simplified12.6
Taylor expanded around inf 12.7
Simplified9.1
Final simplification4.6
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:$slogFactorial from math-functions-0.1.5.2, B"
:precision binary64
: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)))