\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 4.890764603747722816251553012989461421967:\\
\;\;\;\;\frac{0.08333333333333299564049667651488562114537 + \left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z}{x} + \left(0.9189385332046700050057097541866824030876 + \left(\left(\left(\sqrt{x} - \sqrt{0.5}\right) \cdot \log x\right) \cdot \left(\sqrt{x} + \sqrt{0.5}\right) - x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\log x, x - 0.5, 0.9189385332046700050057097541866824030876 - x\right) + \mathsf{fma}\left(\frac{z}{\frac{x}{z}}, 7.936500793651000149400709382518925849581 \cdot 10^{-4}, \mathsf{fma}\left(\frac{z}{\frac{x}{z}}, y, \frac{-0.002777777777777800001512975569539776188321}{\frac{x}{z}}\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r15757247 = x;
double r15757248 = 0.5;
double r15757249 = r15757247 - r15757248;
double r15757250 = log(r15757247);
double r15757251 = r15757249 * r15757250;
double r15757252 = r15757251 - r15757247;
double r15757253 = 0.91893853320467;
double r15757254 = r15757252 + r15757253;
double r15757255 = y;
double r15757256 = 0.0007936500793651;
double r15757257 = r15757255 + r15757256;
double r15757258 = z;
double r15757259 = r15757257 * r15757258;
double r15757260 = 0.0027777777777778;
double r15757261 = r15757259 - r15757260;
double r15757262 = r15757261 * r15757258;
double r15757263 = 0.083333333333333;
double r15757264 = r15757262 + r15757263;
double r15757265 = r15757264 / r15757247;
double r15757266 = r15757254 + r15757265;
return r15757266;
}
double f(double x, double y, double z) {
double r15757267 = x;
double r15757268 = 4.890764603747723;
bool r15757269 = r15757267 <= r15757268;
double r15757270 = 0.083333333333333;
double r15757271 = y;
double r15757272 = 0.0007936500793651;
double r15757273 = r15757271 + r15757272;
double r15757274 = z;
double r15757275 = r15757273 * r15757274;
double r15757276 = 0.0027777777777778;
double r15757277 = r15757275 - r15757276;
double r15757278 = r15757277 * r15757274;
double r15757279 = r15757270 + r15757278;
double r15757280 = r15757279 / r15757267;
double r15757281 = 0.91893853320467;
double r15757282 = sqrt(r15757267);
double r15757283 = 0.5;
double r15757284 = sqrt(r15757283);
double r15757285 = r15757282 - r15757284;
double r15757286 = log(r15757267);
double r15757287 = r15757285 * r15757286;
double r15757288 = r15757282 + r15757284;
double r15757289 = r15757287 * r15757288;
double r15757290 = r15757289 - r15757267;
double r15757291 = r15757281 + r15757290;
double r15757292 = r15757280 + r15757291;
double r15757293 = r15757267 - r15757283;
double r15757294 = r15757281 - r15757267;
double r15757295 = fma(r15757286, r15757293, r15757294);
double r15757296 = r15757267 / r15757274;
double r15757297 = r15757274 / r15757296;
double r15757298 = -r15757276;
double r15757299 = r15757298 / r15757296;
double r15757300 = fma(r15757297, r15757271, r15757299);
double r15757301 = fma(r15757297, r15757272, r15757300);
double r15757302 = r15757295 + r15757301;
double r15757303 = r15757269 ? r15757292 : r15757302;
return r15757303;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 5.8 |
|---|---|
| Target | 1.2 |
| Herbie | 0.4 |
if x < 4.890764603747723Initial program 0.1
rmApplied add-sqr-sqrt0.1
Applied add-sqr-sqrt0.1
Applied difference-of-squares0.1
Applied associate-*l*0.1
if 4.890764603747723 < x Initial program 9.9
Taylor expanded around 0 9.9
Simplified9.8
Taylor expanded around inf 10.1
Simplified0.7
Final simplification0.4
herbie shell --seed 2019172 +o rules:numerics
(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)))