\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\left(\mathsf{fma}\left(x - 0.5, \log x, -\mathsf{expm1}\left(\mathsf{log1p}\left(x\right)\right)\right) + \left(x \cdot 0 + 0.91893853320467001\right)\right) + \left(\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956\right) \cdot \frac{1}{x}double f(double x, double y, double z) {
double r511387 = x;
double r511388 = 0.5;
double r511389 = r511387 - r511388;
double r511390 = log(r511387);
double r511391 = r511389 * r511390;
double r511392 = r511391 - r511387;
double r511393 = 0.91893853320467;
double r511394 = r511392 + r511393;
double r511395 = y;
double r511396 = 0.0007936500793651;
double r511397 = r511395 + r511396;
double r511398 = z;
double r511399 = r511397 * r511398;
double r511400 = 0.0027777777777778;
double r511401 = r511399 - r511400;
double r511402 = r511401 * r511398;
double r511403 = 0.083333333333333;
double r511404 = r511402 + r511403;
double r511405 = r511404 / r511387;
double r511406 = r511394 + r511405;
return r511406;
}
double f(double x, double y, double z) {
double r511407 = x;
double r511408 = 0.5;
double r511409 = r511407 - r511408;
double r511410 = log(r511407);
double r511411 = log1p(r511407);
double r511412 = expm1(r511411);
double r511413 = -r511412;
double r511414 = fma(r511409, r511410, r511413);
double r511415 = 0.0;
double r511416 = r511407 * r511415;
double r511417 = 0.91893853320467;
double r511418 = r511416 + r511417;
double r511419 = r511414 + r511418;
double r511420 = y;
double r511421 = 0.0007936500793651;
double r511422 = r511420 + r511421;
double r511423 = z;
double r511424 = r511422 * r511423;
double r511425 = 0.0027777777777778;
double r511426 = r511424 - r511425;
double r511427 = r511426 * r511423;
double r511428 = 0.083333333333333;
double r511429 = r511427 + r511428;
double r511430 = 1.0;
double r511431 = r511430 / r511407;
double r511432 = r511429 * r511431;
double r511433 = r511419 + r511432;
return r511433;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 6.0 |
|---|---|
| Target | 1.1 |
| Herbie | 6.0 |
Initial program 6.0
rmApplied add-sqr-sqrt6.0
Applied prod-diff6.0
Applied associate-+l+6.0
Simplified6.0
rmApplied expm1-log1p-u5.9
Simplified5.9
rmApplied div-inv6.0
Final simplification6.0
herbie shell --seed 2020047 +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)))