\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 -1133889936191129.25 \lor \neg \left(x \le 24904078378740425507792090038272\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999963610045597306452691555 \cdot x\right) - 110.1139242984810948655649553984403610229\\
\mathbf{else}:\\
\;\;\;\;\frac{x - 2}{\frac{1}{\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 r358965 = x;
double r358966 = 2.0;
double r358967 = r358965 - r358966;
double r358968 = 4.16438922228;
double r358969 = r358965 * r358968;
double r358970 = 78.6994924154;
double r358971 = r358969 + r358970;
double r358972 = r358971 * r358965;
double r358973 = 137.519416416;
double r358974 = r358972 + r358973;
double r358975 = r358974 * r358965;
double r358976 = y;
double r358977 = r358975 + r358976;
double r358978 = r358977 * r358965;
double r358979 = z;
double r358980 = r358978 + r358979;
double r358981 = r358967 * r358980;
double r358982 = 43.3400022514;
double r358983 = r358965 + r358982;
double r358984 = r358983 * r358965;
double r358985 = 263.505074721;
double r358986 = r358984 + r358985;
double r358987 = r358986 * r358965;
double r358988 = 313.399215894;
double r358989 = r358987 + r358988;
double r358990 = r358989 * r358965;
double r358991 = 47.066876606;
double r358992 = r358990 + r358991;
double r358993 = r358981 / r358992;
return r358993;
}
double f(double x, double y, double z) {
double r358994 = x;
double r358995 = -1133889936191129.2;
bool r358996 = r358994 <= r358995;
double r358997 = 2.4904078378740426e+31;
bool r358998 = r358994 <= r358997;
double r358999 = !r358998;
bool r359000 = r358996 || r358999;
double r359001 = y;
double r359002 = 2.0;
double r359003 = pow(r358994, r359002);
double r359004 = r359001 / r359003;
double r359005 = 4.16438922228;
double r359006 = r359005 * r358994;
double r359007 = r359004 + r359006;
double r359008 = 110.1139242984811;
double r359009 = r359007 - r359008;
double r359010 = 2.0;
double r359011 = r358994 - r359010;
double r359012 = 1.0;
double r359013 = 78.6994924154;
double r359014 = fma(r358994, r359005, r359013);
double r359015 = 137.519416416;
double r359016 = fma(r359014, r358994, r359015);
double r359017 = fma(r359016, r358994, r359001);
double r359018 = z;
double r359019 = fma(r359017, r358994, r359018);
double r359020 = 43.3400022514;
double r359021 = r358994 + r359020;
double r359022 = 263.505074721;
double r359023 = fma(r359021, r358994, r359022);
double r359024 = 313.399215894;
double r359025 = fma(r359023, r358994, r359024);
double r359026 = 47.066876606;
double r359027 = fma(r359025, r358994, r359026);
double r359028 = r359019 / r359027;
double r359029 = r359012 / r359028;
double r359030 = r359011 / r359029;
double r359031 = r359000 ? r359009 : r359030;
return r359031;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 26.4 |
|---|---|
| Target | 0.6 |
| Herbie | 1.0 |
if x < -1133889936191129.2 or 2.4904078378740426e+31 < x Initial program 57.2
Simplified52.9
rmApplied clear-num52.9
Taylor expanded around inf 1.9
if -1133889936191129.2 < x < 2.4904078378740426e+31Initial program 0.4
Simplified0.4
rmApplied clear-num0.3
Final simplification1.0
herbie shell --seed 2019356 +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.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)))