\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}\begin{array}{l}
\mathbf{if}\;x \le -2.230692094398123616129848119711068924868 \cdot 10^{60} \lor \neg \left(x \le 7.347246754963192528111540598878854105691 \cdot 10^{65}\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999963610045597306452691555 \cdot x\right) - 110.1139242984810948655649553984403610229\\
\mathbf{else}:\\
\;\;\;\;\frac{x - 2}{\sqrt{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}} \cdot \frac{\left(\left(\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059\right) \cdot x + y\right) \cdot x + z}{\sqrt{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}}\\
\end{array}double f(double x, double y, double z) {
double r260968 = x;
double r260969 = 2.0;
double r260970 = r260968 - r260969;
double r260971 = 4.16438922228;
double r260972 = r260968 * r260971;
double r260973 = 78.6994924154;
double r260974 = r260972 + r260973;
double r260975 = r260974 * r260968;
double r260976 = 137.519416416;
double r260977 = r260975 + r260976;
double r260978 = r260977 * r260968;
double r260979 = y;
double r260980 = r260978 + r260979;
double r260981 = r260980 * r260968;
double r260982 = z;
double r260983 = r260981 + r260982;
double r260984 = r260970 * r260983;
double r260985 = 43.3400022514;
double r260986 = r260968 + r260985;
double r260987 = r260986 * r260968;
double r260988 = 263.505074721;
double r260989 = r260987 + r260988;
double r260990 = r260989 * r260968;
double r260991 = 313.399215894;
double r260992 = r260990 + r260991;
double r260993 = r260992 * r260968;
double r260994 = 47.066876606;
double r260995 = r260993 + r260994;
double r260996 = r260984 / r260995;
return r260996;
}
double f(double x, double y, double z) {
double r260997 = x;
double r260998 = -2.2306920943981236e+60;
bool r260999 = r260997 <= r260998;
double r261000 = 7.3472467549631925e+65;
bool r261001 = r260997 <= r261000;
double r261002 = !r261001;
bool r261003 = r260999 || r261002;
double r261004 = y;
double r261005 = 2.0;
double r261006 = pow(r260997, r261005);
double r261007 = r261004 / r261006;
double r261008 = 4.16438922228;
double r261009 = r261008 * r260997;
double r261010 = r261007 + r261009;
double r261011 = 110.1139242984811;
double r261012 = r261010 - r261011;
double r261013 = 2.0;
double r261014 = r260997 - r261013;
double r261015 = 43.3400022514;
double r261016 = r260997 + r261015;
double r261017 = r261016 * r260997;
double r261018 = 263.505074721;
double r261019 = r261017 + r261018;
double r261020 = r261019 * r260997;
double r261021 = 313.399215894;
double r261022 = r261020 + r261021;
double r261023 = r261022 * r260997;
double r261024 = 47.066876606;
double r261025 = r261023 + r261024;
double r261026 = sqrt(r261025);
double r261027 = r261014 / r261026;
double r261028 = r260997 * r261008;
double r261029 = 78.6994924154;
double r261030 = r261028 + r261029;
double r261031 = r261030 * r260997;
double r261032 = 137.519416416;
double r261033 = r261031 + r261032;
double r261034 = r261033 * r260997;
double r261035 = r261034 + r261004;
double r261036 = r261035 * r260997;
double r261037 = z;
double r261038 = r261036 + r261037;
double r261039 = r261038 / r261026;
double r261040 = r261027 * r261039;
double r261041 = r261003 ? r261012 : r261040;
return r261041;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.4 |
|---|---|
| Target | 0.4 |
| Herbie | 0.8 |
if x < -2.2306920943981236e+60 or 7.3472467549631925e+65 < x Initial program 64.0
Taylor expanded around inf 0.2
if -2.2306920943981236e+60 < x < 7.3472467549631925e+65Initial program 2.3
rmApplied add-sqr-sqrt2.5
Applied times-frac1.2
Final simplification0.8
herbie shell --seed 2019298
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, C"
:precision binary64
:herbie-target
(if (< x -3.3261287258700048e62) (- (+ (/ y (* x x)) (* 4.16438922227999964 x)) 110.11392429848109) (if (< x 9.4299917145546727e55) (* (/ (- x 2) 1) (/ (+ (* (+ (* (+ (* (+ (* x 4.16438922227999964) 78.6994924154000017) x) 137.51941641600001) x) y) x) z) (+ (* (+ (+ (* 263.50507472100003 x) (+ (* 43.3400022514000014 (* x x)) (* x (* x x)))) 313.399215894) x) 47.066876606000001))) (- (+ (/ y (* x x)) (* 4.16438922227999964 x)) 110.11392429848109)))
(/ (* (- x 2) (+ (* (+ (* (+ (* (+ (* x 4.16438922227999964) 78.6994924154000017) x) 137.51941641600001) x) y) x) z)) (+ (* (+ (* (+ (* (+ x 43.3400022514000014) x) 263.50507472100003) x) 313.399215894) x) 47.066876606000001)))