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 -184499698888615392 \lor \neg \left(z \le 182633786.16382062435150146484375\right):\\
\;\;\;\;x + \left(0.07512208616047560960637952121032867580652 \cdot \frac{y}{z} + 0.06929105992918889456166908757950295694172 \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\sqrt{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}} \cdot \frac{\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736}{\sqrt{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}}\\
\end{array}double f(double x, double y, double z) {
double r355757 = x;
double r355758 = y;
double r355759 = z;
double r355760 = 0.0692910599291889;
double r355761 = r355759 * r355760;
double r355762 = 0.4917317610505968;
double r355763 = r355761 + r355762;
double r355764 = r355763 * r355759;
double r355765 = 0.279195317918525;
double r355766 = r355764 + r355765;
double r355767 = r355758 * r355766;
double r355768 = 6.012459259764103;
double r355769 = r355759 + r355768;
double r355770 = r355769 * r355759;
double r355771 = 3.350343815022304;
double r355772 = r355770 + r355771;
double r355773 = r355767 / r355772;
double r355774 = r355757 + r355773;
return r355774;
}
double f(double x, double y, double z) {
double r355775 = z;
double r355776 = -1.844996988886154e+17;
bool r355777 = r355775 <= r355776;
double r355778 = 182633786.16382062;
bool r355779 = r355775 <= r355778;
double r355780 = !r355779;
bool r355781 = r355777 || r355780;
double r355782 = x;
double r355783 = 0.07512208616047561;
double r355784 = y;
double r355785 = r355784 / r355775;
double r355786 = r355783 * r355785;
double r355787 = 0.0692910599291889;
double r355788 = r355787 * r355784;
double r355789 = r355786 + r355788;
double r355790 = r355782 + r355789;
double r355791 = 6.012459259764103;
double r355792 = r355775 + r355791;
double r355793 = r355792 * r355775;
double r355794 = 3.350343815022304;
double r355795 = r355793 + r355794;
double r355796 = sqrt(r355795);
double r355797 = r355784 / r355796;
double r355798 = r355775 * r355787;
double r355799 = 0.4917317610505968;
double r355800 = r355798 + r355799;
double r355801 = r355800 * r355775;
double r355802 = 0.279195317918525;
double r355803 = r355801 + r355802;
double r355804 = r355803 / r355796;
double r355805 = r355797 * r355804;
double r355806 = r355782 + r355805;
double r355807 = r355781 ? r355790 : r355806;
return r355807;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.0 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if z < -1.844996988886154e+17 or 182633786.16382062 < z Initial program 41.8
Taylor expanded around inf 0.0
if -1.844996988886154e+17 < z < 182633786.16382062Initial program 0.2
rmApplied add-sqr-sqrt0.5
Applied times-frac0.2
Final simplification0.1
herbie shell --seed 2019353
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(if (< z -8120153.652456675) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x)) (if (< z 657611897278737680000) (+ x (* (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (/ 1 (+ (* (+ z 6.012459259764103) z) 3.350343815022304)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x))))
(+ x (/ (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (+ (* (+ z 6.012459259764103) z) 3.350343815022304))))