\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}\left(\log \left(\sqrt[3]{x} \cdot {\left(\frac{1}{x}\right)}^{\frac{-1}{3}}\right) \cdot \left(x - 0.5\right) + \mathsf{fma}\left(x - 0.5, \log \left(\sqrt[3]{x}\right), 0.9189385332046700050057097541866824030876 - x\right)\right) + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}double f(double x, double y, double z) {
double r381525 = x;
double r381526 = 0.5;
double r381527 = r381525 - r381526;
double r381528 = log(r381525);
double r381529 = r381527 * r381528;
double r381530 = r381529 - r381525;
double r381531 = 0.91893853320467;
double r381532 = r381530 + r381531;
double r381533 = y;
double r381534 = 0.0007936500793651;
double r381535 = r381533 + r381534;
double r381536 = z;
double r381537 = r381535 * r381536;
double r381538 = 0.0027777777777778;
double r381539 = r381537 - r381538;
double r381540 = r381539 * r381536;
double r381541 = 0.083333333333333;
double r381542 = r381540 + r381541;
double r381543 = r381542 / r381525;
double r381544 = r381532 + r381543;
return r381544;
}
double f(double x, double y, double z) {
double r381545 = x;
double r381546 = cbrt(r381545);
double r381547 = 1.0;
double r381548 = r381547 / r381545;
double r381549 = -0.3333333333333333;
double r381550 = pow(r381548, r381549);
double r381551 = r381546 * r381550;
double r381552 = log(r381551);
double r381553 = 0.5;
double r381554 = r381545 - r381553;
double r381555 = r381552 * r381554;
double r381556 = log(r381546);
double r381557 = 0.91893853320467;
double r381558 = r381557 - r381545;
double r381559 = fma(r381554, r381556, r381558);
double r381560 = r381555 + r381559;
double r381561 = y;
double r381562 = 0.0007936500793651;
double r381563 = r381561 + r381562;
double r381564 = z;
double r381565 = r381563 * r381564;
double r381566 = 0.0027777777777778;
double r381567 = r381565 - r381566;
double r381568 = r381567 * r381564;
double r381569 = 0.083333333333333;
double r381570 = r381568 + r381569;
double r381571 = r381570 / r381545;
double r381572 = r381560 + r381571;
return r381572;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 5.8 |
|---|---|
| Target | 1.4 |
| Herbie | 5.8 |
Initial program 5.8
rmApplied add-cube-cbrt5.8
Applied log-prod5.8
Applied distribute-rgt-in5.8
Applied associate--l+5.8
Applied associate-+l+5.8
Simplified5.8
Taylor expanded around inf 5.8
Final simplification5.8
herbie shell --seed 2019303 +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.91893853320467001 x)) (/ 0.0833333333333329956 x)) (* (/ z x) (- (* z (+ y 7.93650079365100015e-4)) 0.0027777777777778)))
(+ (+ (- (* (- x 0.5) (log x)) x) 0.91893853320467001) (/ (+ (* (- (* (+ y 7.93650079365100015e-4) z) 0.0027777777777778) z) 0.0833333333333329956) x)))