\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}\begin{array}{l}
\mathbf{if}\;x \le -2.54463890534666934 \cdot 10^{39} \lor \neg \left(x \le 2.8097973154484201 \cdot 10^{55}\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\
\mathbf{else}:\\
\;\;\;\;\frac{x - 2}{\frac{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}{\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z}}\\
\end{array}double f(double x, double y, double z) {
double r430027 = x;
double r430028 = 2.0;
double r430029 = r430027 - r430028;
double r430030 = 4.16438922228;
double r430031 = r430027 * r430030;
double r430032 = 78.6994924154;
double r430033 = r430031 + r430032;
double r430034 = r430033 * r430027;
double r430035 = 137.519416416;
double r430036 = r430034 + r430035;
double r430037 = r430036 * r430027;
double r430038 = y;
double r430039 = r430037 + r430038;
double r430040 = r430039 * r430027;
double r430041 = z;
double r430042 = r430040 + r430041;
double r430043 = r430029 * r430042;
double r430044 = 43.3400022514;
double r430045 = r430027 + r430044;
double r430046 = r430045 * r430027;
double r430047 = 263.505074721;
double r430048 = r430046 + r430047;
double r430049 = r430048 * r430027;
double r430050 = 313.399215894;
double r430051 = r430049 + r430050;
double r430052 = r430051 * r430027;
double r430053 = 47.066876606;
double r430054 = r430052 + r430053;
double r430055 = r430043 / r430054;
return r430055;
}
double f(double x, double y, double z) {
double r430056 = x;
double r430057 = -2.5446389053466693e+39;
bool r430058 = r430056 <= r430057;
double r430059 = 2.80979731544842e+55;
bool r430060 = r430056 <= r430059;
double r430061 = !r430060;
bool r430062 = r430058 || r430061;
double r430063 = y;
double r430064 = 2.0;
double r430065 = pow(r430056, r430064);
double r430066 = r430063 / r430065;
double r430067 = 4.16438922228;
double r430068 = r430067 * r430056;
double r430069 = r430066 + r430068;
double r430070 = 110.1139242984811;
double r430071 = r430069 - r430070;
double r430072 = 2.0;
double r430073 = r430056 - r430072;
double r430074 = 43.3400022514;
double r430075 = r430056 + r430074;
double r430076 = r430075 * r430056;
double r430077 = 263.505074721;
double r430078 = r430076 + r430077;
double r430079 = r430078 * r430056;
double r430080 = 313.399215894;
double r430081 = r430079 + r430080;
double r430082 = r430081 * r430056;
double r430083 = 47.066876606;
double r430084 = r430082 + r430083;
double r430085 = r430056 * r430067;
double r430086 = 78.6994924154;
double r430087 = r430085 + r430086;
double r430088 = r430087 * r430056;
double r430089 = 137.519416416;
double r430090 = r430088 + r430089;
double r430091 = r430090 * r430056;
double r430092 = r430091 + r430063;
double r430093 = r430092 * r430056;
double r430094 = z;
double r430095 = r430093 + r430094;
double r430096 = r430084 / r430095;
double r430097 = r430073 / r430096;
double r430098 = r430062 ? r430071 : r430097;
return r430098;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.9 |
|---|---|
| Target | 0.5 |
| Herbie | 0.8 |
if x < -2.5446389053466693e+39 or 2.80979731544842e+55 < x Initial program 61.6
Taylor expanded around inf 0.8
if -2.5446389053466693e+39 < x < 2.80979731544842e+55Initial program 1.2
rmApplied associate-/l*0.7
Final simplification0.8
herbie shell --seed 2020021
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, C"
:precision binary64
:herbie-target
(if (< x -3.326128725870005e+62) (- (+ (/ y (* x x)) (* 4.16438922228 x)) 110.1139242984811) (if (< x 9.429991714554673e+55) (* (/ (- x 2) 1) (/ (+ (* (+ (* (+ (* (+ (* x 4.16438922228) 78.6994924154) x) 137.519416416) x) y) x) z) (+ (* (+ (+ (* 263.505074721 x) (+ (* 43.3400022514 (* x x)) (* x (* x x)))) 313.399215894) x) 47.066876606))) (- (+ (/ y (* x x)) (* 4.16438922228 x)) 110.1139242984811)))
(/ (* (- x 2) (+ (* (+ (* (+ (* (+ (* x 4.16438922228) 78.6994924154) x) 137.519416416) x) y) x) z)) (+ (* (+ (* (+ (* (+ x 43.3400022514) x) 263.505074721) x) 313.399215894) x) 47.066876606)))