x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\begin{array}{l}
\mathbf{if}\;z \le -0.6121835230050514109478854152257554233074 \lor \neg \left(z \le 1.477218818365684420300619684695273871322 \cdot 10^{-11}\right):\\
\;\;\;\;x + \left(0.06929105992918889456166908757950295694172 \cdot y + \frac{y}{z} \cdot \left(0.07512208616047560960637952121032867580652 - \frac{0.4046220386999212492717958866705885156989}{z}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{\frac{\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736}{\sqrt{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}}}{\sqrt{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}}\\
\end{array}double f(double x, double y, double z) {
double r268711 = x;
double r268712 = y;
double r268713 = z;
double r268714 = 0.0692910599291889;
double r268715 = r268713 * r268714;
double r268716 = 0.4917317610505968;
double r268717 = r268715 + r268716;
double r268718 = r268717 * r268713;
double r268719 = 0.279195317918525;
double r268720 = r268718 + r268719;
double r268721 = r268712 * r268720;
double r268722 = 6.012459259764103;
double r268723 = r268713 + r268722;
double r268724 = r268723 * r268713;
double r268725 = 3.350343815022304;
double r268726 = r268724 + r268725;
double r268727 = r268721 / r268726;
double r268728 = r268711 + r268727;
return r268728;
}
double f(double x, double y, double z) {
double r268729 = z;
double r268730 = -0.6121835230050514;
bool r268731 = r268729 <= r268730;
double r268732 = 1.4772188183656844e-11;
bool r268733 = r268729 <= r268732;
double r268734 = !r268733;
bool r268735 = r268731 || r268734;
double r268736 = x;
double r268737 = 0.0692910599291889;
double r268738 = y;
double r268739 = r268737 * r268738;
double r268740 = r268738 / r268729;
double r268741 = 0.07512208616047561;
double r268742 = 0.40462203869992125;
double r268743 = r268742 / r268729;
double r268744 = r268741 - r268743;
double r268745 = r268740 * r268744;
double r268746 = r268739 + r268745;
double r268747 = r268736 + r268746;
double r268748 = r268729 * r268737;
double r268749 = 0.4917317610505968;
double r268750 = r268748 + r268749;
double r268751 = r268750 * r268729;
double r268752 = 0.279195317918525;
double r268753 = r268751 + r268752;
double r268754 = 6.012459259764103;
double r268755 = r268729 + r268754;
double r268756 = r268755 * r268729;
double r268757 = 3.350343815022304;
double r268758 = r268756 + r268757;
double r268759 = sqrt(r268758);
double r268760 = r268753 / r268759;
double r268761 = r268760 / r268759;
double r268762 = r268738 * r268761;
double r268763 = r268736 + r268762;
double r268764 = r268735 ? r268747 : r268763;
return r268764;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.3 |
|---|---|
| Target | 0.1 |
| Herbie | 0.5 |
if z < -0.6121835230050514 or 1.4772188183656844e-11 < z Initial program 39.6
Taylor expanded around inf 0.8
Simplified0.8
if -0.6121835230050514 < z < 1.4772188183656844e-11Initial program 0.1
rmApplied *-un-lft-identity0.1
Applied times-frac0.1
Simplified0.1
rmApplied add-sqr-sqrt0.4
Applied associate-/r*0.1
Final simplification0.5
herbie shell --seed 2019303
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(if (< z -8120153.6524566747) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291888946) y) (- (/ (* 0.404622038699921249 y) (* z z)) x)) (if (< z 657611897278737680000) (+ x (* (* y (+ (* (+ (* z 0.0692910599291888946) 0.49173176105059679) z) 0.279195317918524977)) (/ 1 (+ (* (+ z 6.0124592597641033) z) 3.35034381502230394)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291888946) y) (- (/ (* 0.404622038699921249 y) (* z z)) x))))
(+ x (/ (* y (+ (* (+ (* z 0.0692910599291888946) 0.49173176105059679) z) 0.279195317918524977)) (+ (* (+ z 6.0124592597641033) z) 3.35034381502230394))))