\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 29155066420271276.0:\\
\;\;\;\;\left(\left(\left(\log \left(\sqrt[3]{x}\right) \cdot \left(x - 0.5\right) - x\right) + 0.91893853320467\right) + \left(x - 0.5\right) \cdot \log \left({x}^{\frac{1}{3}} \cdot \sqrt[3]{x}\right)\right) + \frac{0.083333333333333 + \left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z}{x}\\
\mathbf{else}:\\
\;\;\;\;\left(0.91893853320467 + \left(\left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) + \log \left({x}^{\frac{1}{3}}\right) \cdot \left(x - 0.5\right)\right) - x\right)\right) + \left(\frac{z}{\frac{x}{z}} \cdot \left(y + 0.0007936500793651\right) - \frac{0.0027777777777778 \cdot z}{x}\right)\\
\end{array}double f(double x, double y, double z) {
double r26979575 = x;
double r26979576 = 0.5;
double r26979577 = r26979575 - r26979576;
double r26979578 = log(r26979575);
double r26979579 = r26979577 * r26979578;
double r26979580 = r26979579 - r26979575;
double r26979581 = 0.91893853320467;
double r26979582 = r26979580 + r26979581;
double r26979583 = y;
double r26979584 = 0.0007936500793651;
double r26979585 = r26979583 + r26979584;
double r26979586 = z;
double r26979587 = r26979585 * r26979586;
double r26979588 = 0.0027777777777778;
double r26979589 = r26979587 - r26979588;
double r26979590 = r26979589 * r26979586;
double r26979591 = 0.083333333333333;
double r26979592 = r26979590 + r26979591;
double r26979593 = r26979592 / r26979575;
double r26979594 = r26979582 + r26979593;
return r26979594;
}
double f(double x, double y, double z) {
double r26979595 = x;
double r26979596 = 29155066420271276.0;
bool r26979597 = r26979595 <= r26979596;
double r26979598 = cbrt(r26979595);
double r26979599 = log(r26979598);
double r26979600 = 0.5;
double r26979601 = r26979595 - r26979600;
double r26979602 = r26979599 * r26979601;
double r26979603 = r26979602 - r26979595;
double r26979604 = 0.91893853320467;
double r26979605 = r26979603 + r26979604;
double r26979606 = 0.3333333333333333;
double r26979607 = pow(r26979595, r26979606);
double r26979608 = r26979607 * r26979598;
double r26979609 = log(r26979608);
double r26979610 = r26979601 * r26979609;
double r26979611 = r26979605 + r26979610;
double r26979612 = 0.083333333333333;
double r26979613 = y;
double r26979614 = 0.0007936500793651;
double r26979615 = r26979613 + r26979614;
double r26979616 = z;
double r26979617 = r26979615 * r26979616;
double r26979618 = 0.0027777777777778;
double r26979619 = r26979617 - r26979618;
double r26979620 = r26979619 * r26979616;
double r26979621 = r26979612 + r26979620;
double r26979622 = r26979621 / r26979595;
double r26979623 = r26979611 + r26979622;
double r26979624 = r26979598 * r26979598;
double r26979625 = log(r26979624);
double r26979626 = r26979601 * r26979625;
double r26979627 = log(r26979607);
double r26979628 = r26979627 * r26979601;
double r26979629 = r26979626 + r26979628;
double r26979630 = r26979629 - r26979595;
double r26979631 = r26979604 + r26979630;
double r26979632 = r26979595 / r26979616;
double r26979633 = r26979616 / r26979632;
double r26979634 = r26979633 * r26979615;
double r26979635 = r26979618 * r26979616;
double r26979636 = r26979635 / r26979595;
double r26979637 = r26979634 - r26979636;
double r26979638 = r26979631 + r26979637;
double r26979639 = r26979597 ? r26979623 : r26979638;
return r26979639;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.6 |
|---|---|
| Target | 1.1 |
| Herbie | 0.3 |
if x < 29155066420271276.0Initial program 0.1
rmApplied add-cube-cbrt0.1
Applied log-prod0.1
Applied distribute-rgt-in0.1
Applied associate--l+0.1
Applied associate-+l+0.1
rmApplied pow1/30.1
if 29155066420271276.0 < x Initial program 10.0
rmApplied add-cube-cbrt10.0
Applied log-prod10.0
Applied distribute-lft-in10.1
rmApplied pow1/310.0
Taylor expanded around inf 10.1
Simplified0.5
Final simplification0.3
herbie shell --seed 2019158
(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)))