\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}\begin{array}{l}
\mathbf{if}\;x \le 2.0012039557004164 \cdot 10^{87}:\\
\;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log \left(\sqrt{x}\right) + \left(\log \left(\sqrt{x}\right) \cdot \left(x - 0.5\right) - x\right)\right) + 0.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467001\right) + \left(\frac{{z}^{2}}{x} \cdot \left(y + 7.93650079365100015 \cdot 10^{-4}\right) - 0.0027777777777778 \cdot \frac{z}{x}\right)\\
\end{array}double f(double x, double y, double z) {
double r1060397 = x;
double r1060398 = 0.5;
double r1060399 = r1060397 - r1060398;
double r1060400 = log(r1060397);
double r1060401 = r1060399 * r1060400;
double r1060402 = r1060401 - r1060397;
double r1060403 = 0.91893853320467;
double r1060404 = r1060402 + r1060403;
double r1060405 = y;
double r1060406 = 0.0007936500793651;
double r1060407 = r1060405 + r1060406;
double r1060408 = z;
double r1060409 = r1060407 * r1060408;
double r1060410 = 0.0027777777777778;
double r1060411 = r1060409 - r1060410;
double r1060412 = r1060411 * r1060408;
double r1060413 = 0.083333333333333;
double r1060414 = r1060412 + r1060413;
double r1060415 = r1060414 / r1060397;
double r1060416 = r1060404 + r1060415;
return r1060416;
}
double f(double x, double y, double z) {
double r1060417 = x;
double r1060418 = 2.0012039557004164e+87;
bool r1060419 = r1060417 <= r1060418;
double r1060420 = 0.5;
double r1060421 = r1060417 - r1060420;
double r1060422 = sqrt(r1060417);
double r1060423 = log(r1060422);
double r1060424 = r1060421 * r1060423;
double r1060425 = r1060423 * r1060421;
double r1060426 = r1060425 - r1060417;
double r1060427 = r1060424 + r1060426;
double r1060428 = 0.91893853320467;
double r1060429 = r1060427 + r1060428;
double r1060430 = y;
double r1060431 = 0.0007936500793651;
double r1060432 = r1060430 + r1060431;
double r1060433 = z;
double r1060434 = r1060432 * r1060433;
double r1060435 = 0.0027777777777778;
double r1060436 = r1060434 - r1060435;
double r1060437 = r1060436 * r1060433;
double r1060438 = 0.083333333333333;
double r1060439 = r1060437 + r1060438;
double r1060440 = r1060439 / r1060417;
double r1060441 = r1060429 + r1060440;
double r1060442 = log(r1060417);
double r1060443 = r1060421 * r1060442;
double r1060444 = r1060443 - r1060417;
double r1060445 = r1060444 + r1060428;
double r1060446 = 2.0;
double r1060447 = pow(r1060433, r1060446);
double r1060448 = r1060447 / r1060417;
double r1060449 = r1060448 * r1060432;
double r1060450 = r1060433 / r1060417;
double r1060451 = r1060435 * r1060450;
double r1060452 = r1060449 - r1060451;
double r1060453 = r1060445 + r1060452;
double r1060454 = r1060419 ? r1060441 : r1060453;
return r1060454;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.0 |
|---|---|
| Target | 1.1 |
| Herbie | 4.4 |
if x < 2.0012039557004164e+87Initial program 0.8
rmApplied add-sqr-sqrt0.8
Applied log-prod0.8
Applied distribute-lft-in0.8
Applied associate--l+0.9
Simplified0.9
if 2.0012039557004164e+87 < x Initial program 12.5
Taylor expanded around inf 12.6
Simplified9.0
Final simplification4.4
herbie shell --seed 2020047
(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)))