\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467\right) + \frac{\left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.083333333333333}{x}\begin{array}{l}
\mathbf{if}\;x \le 2.010811705498022 \cdot 10^{+137}:\\
\;\;\;\;\frac{\mathsf{fma}\left(z, z \cdot \left(0.0007936500793651 + y\right) - 0.0027777777777778, 0.083333333333333\right)}{x} - \frac{x \cdot x - \mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right) \cdot \mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right) + x}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{\frac{x}{z}}, 0.0007936500793651, \frac{0.083333333333333}{x} - 0.0027777777777778 \cdot \frac{z}{x}\right) - \left(\mathsf{fma}\left(-\log x, x - 0.5, x\right) - 0.91893853320467\right)\\
\end{array}double f(double x, double y, double z) {
double r20477317 = x;
double r20477318 = 0.5;
double r20477319 = r20477317 - r20477318;
double r20477320 = log(r20477317);
double r20477321 = r20477319 * r20477320;
double r20477322 = r20477321 - r20477317;
double r20477323 = 0.91893853320467;
double r20477324 = r20477322 + r20477323;
double r20477325 = y;
double r20477326 = 0.0007936500793651;
double r20477327 = r20477325 + r20477326;
double r20477328 = z;
double r20477329 = r20477327 * r20477328;
double r20477330 = 0.0027777777777778;
double r20477331 = r20477329 - r20477330;
double r20477332 = r20477331 * r20477328;
double r20477333 = 0.083333333333333;
double r20477334 = r20477332 + r20477333;
double r20477335 = r20477334 / r20477317;
double r20477336 = r20477324 + r20477335;
return r20477336;
}
double f(double x, double y, double z) {
double r20477337 = x;
double r20477338 = 2.010811705498022e+137;
bool r20477339 = r20477337 <= r20477338;
double r20477340 = z;
double r20477341 = 0.0007936500793651;
double r20477342 = y;
double r20477343 = r20477341 + r20477342;
double r20477344 = r20477340 * r20477343;
double r20477345 = 0.0027777777777778;
double r20477346 = r20477344 - r20477345;
double r20477347 = 0.083333333333333;
double r20477348 = fma(r20477340, r20477346, r20477347);
double r20477349 = r20477348 / r20477337;
double r20477350 = r20477337 * r20477337;
double r20477351 = log(r20477337);
double r20477352 = 0.5;
double r20477353 = r20477337 - r20477352;
double r20477354 = 0.91893853320467;
double r20477355 = fma(r20477351, r20477353, r20477354);
double r20477356 = r20477355 * r20477355;
double r20477357 = r20477350 - r20477356;
double r20477358 = r20477355 + r20477337;
double r20477359 = r20477357 / r20477358;
double r20477360 = r20477349 - r20477359;
double r20477361 = r20477337 / r20477340;
double r20477362 = r20477340 / r20477361;
double r20477363 = r20477347 / r20477337;
double r20477364 = r20477340 / r20477337;
double r20477365 = r20477345 * r20477364;
double r20477366 = r20477363 - r20477365;
double r20477367 = fma(r20477362, r20477341, r20477366);
double r20477368 = -r20477351;
double r20477369 = fma(r20477368, r20477353, r20477337);
double r20477370 = r20477369 - r20477354;
double r20477371 = r20477367 - r20477370;
double r20477372 = r20477339 ? r20477360 : r20477371;
return r20477372;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 5.9 |
|---|---|
| Target | 1.1 |
| Herbie | 2.5 |
if x < 2.010811705498022e+137Initial program 2.1
Simplified2.1
rmApplied flip--2.2
if 2.010811705498022e+137 < x Initial program 13.0
Simplified13.0
Taylor expanded around inf 13.0
Simplified12.9
rmApplied add-sqr-sqrt12.9
Applied associate-/r*12.9
Taylor expanded around 0 10.7
Simplified3.1
Final simplification2.5
herbie shell --seed 2019162 +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)))