\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 -4316916127649955986086064816128 \lor \neg \left(x \le 3284151720188847567423913590784\right):\\
\;\;\;\;\mathsf{fma}\left(x, 4.16438922227999963610045597306452691555, \frac{y}{{x}^{2}}\right) - 110.1139242984810948655649553984403610229\\
\mathbf{else}:\\
\;\;\;\;\left(x - 2\right) \cdot \frac{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(x, 4.16438922227999963610045597306452691555, 78.69949241540000173245061887428164482117\right), x, 137.5194164160000127594685181975364685059\right), x, y\right), x, z\right)}{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(x + 43.3400022514000013984514225739985704422, x, 263.5050747210000281484099105000495910645\right), x, 313.3992158940000081202015280723571777344\right), x, 47.06687660600000100430406746454536914825\right)}\\
\end{array}double f(double x, double y, double z) {
double r252078 = x;
double r252079 = 2.0;
double r252080 = r252078 - r252079;
double r252081 = 4.16438922228;
double r252082 = r252078 * r252081;
double r252083 = 78.6994924154;
double r252084 = r252082 + r252083;
double r252085 = r252084 * r252078;
double r252086 = 137.519416416;
double r252087 = r252085 + r252086;
double r252088 = r252087 * r252078;
double r252089 = y;
double r252090 = r252088 + r252089;
double r252091 = r252090 * r252078;
double r252092 = z;
double r252093 = r252091 + r252092;
double r252094 = r252080 * r252093;
double r252095 = 43.3400022514;
double r252096 = r252078 + r252095;
double r252097 = r252096 * r252078;
double r252098 = 263.505074721;
double r252099 = r252097 + r252098;
double r252100 = r252099 * r252078;
double r252101 = 313.399215894;
double r252102 = r252100 + r252101;
double r252103 = r252102 * r252078;
double r252104 = 47.066876606;
double r252105 = r252103 + r252104;
double r252106 = r252094 / r252105;
return r252106;
}
double f(double x, double y, double z) {
double r252107 = x;
double r252108 = -4.316916127649956e+30;
bool r252109 = r252107 <= r252108;
double r252110 = 3.2841517201888476e+30;
bool r252111 = r252107 <= r252110;
double r252112 = !r252111;
bool r252113 = r252109 || r252112;
double r252114 = 4.16438922228;
double r252115 = y;
double r252116 = 2.0;
double r252117 = pow(r252107, r252116);
double r252118 = r252115 / r252117;
double r252119 = fma(r252107, r252114, r252118);
double r252120 = 110.1139242984811;
double r252121 = r252119 - r252120;
double r252122 = 2.0;
double r252123 = r252107 - r252122;
double r252124 = 78.6994924154;
double r252125 = fma(r252107, r252114, r252124);
double r252126 = 137.519416416;
double r252127 = fma(r252125, r252107, r252126);
double r252128 = fma(r252127, r252107, r252115);
double r252129 = z;
double r252130 = fma(r252128, r252107, r252129);
double r252131 = 43.3400022514;
double r252132 = r252107 + r252131;
double r252133 = 263.505074721;
double r252134 = fma(r252132, r252107, r252133);
double r252135 = 313.399215894;
double r252136 = fma(r252134, r252107, r252135);
double r252137 = 47.066876606;
double r252138 = fma(r252136, r252107, r252137);
double r252139 = r252130 / r252138;
double r252140 = r252123 * r252139;
double r252141 = r252113 ? r252121 : r252140;
return r252141;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 26.7 |
|---|---|
| Target | 0.5 |
| Herbie | 0.7 |
if x < -4.316916127649956e+30 or 3.2841517201888476e+30 < x Initial program 58.7
Simplified55.0
rmApplied div-inv55.0
Simplified55.0
Taylor expanded around inf 1.1
Simplified1.1
if -4.316916127649956e+30 < x < 3.2841517201888476e+30Initial program 0.7
Simplified0.6
rmApplied div-inv0.6
Simplified0.3
Final simplification0.7
herbie shell --seed 2019306 +o rules:numerics
(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)))