\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 -12340170654382656992951098480766484480 \lor \neg \left(x \le 7.1701112340318151793359711348385951104 \cdot 10^{44}\right):\\
\;\;\;\;\mathsf{fma}\left(4.16438922227999963610045597306452691555, x, \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 r249310 = x;
double r249311 = 2.0;
double r249312 = r249310 - r249311;
double r249313 = 4.16438922228;
double r249314 = r249310 * r249313;
double r249315 = 78.6994924154;
double r249316 = r249314 + r249315;
double r249317 = r249316 * r249310;
double r249318 = 137.519416416;
double r249319 = r249317 + r249318;
double r249320 = r249319 * r249310;
double r249321 = y;
double r249322 = r249320 + r249321;
double r249323 = r249322 * r249310;
double r249324 = z;
double r249325 = r249323 + r249324;
double r249326 = r249312 * r249325;
double r249327 = 43.3400022514;
double r249328 = r249310 + r249327;
double r249329 = r249328 * r249310;
double r249330 = 263.505074721;
double r249331 = r249329 + r249330;
double r249332 = r249331 * r249310;
double r249333 = 313.399215894;
double r249334 = r249332 + r249333;
double r249335 = r249334 * r249310;
double r249336 = 47.066876606;
double r249337 = r249335 + r249336;
double r249338 = r249326 / r249337;
return r249338;
}
double f(double x, double y, double z) {
double r249339 = x;
double r249340 = -1.2340170654382657e+37;
bool r249341 = r249339 <= r249340;
double r249342 = 7.170111234031815e+44;
bool r249343 = r249339 <= r249342;
double r249344 = !r249343;
bool r249345 = r249341 || r249344;
double r249346 = 4.16438922228;
double r249347 = y;
double r249348 = 2.0;
double r249349 = pow(r249339, r249348);
double r249350 = r249347 / r249349;
double r249351 = fma(r249346, r249339, r249350);
double r249352 = 110.1139242984811;
double r249353 = r249351 - r249352;
double r249354 = 2.0;
double r249355 = r249339 - r249354;
double r249356 = 78.6994924154;
double r249357 = fma(r249339, r249346, r249356);
double r249358 = 137.519416416;
double r249359 = fma(r249357, r249339, r249358);
double r249360 = fma(r249359, r249339, r249347);
double r249361 = z;
double r249362 = fma(r249360, r249339, r249361);
double r249363 = 43.3400022514;
double r249364 = r249339 + r249363;
double r249365 = 263.505074721;
double r249366 = fma(r249364, r249339, r249365);
double r249367 = 313.399215894;
double r249368 = fma(r249366, r249339, r249367);
double r249369 = 47.066876606;
double r249370 = fma(r249368, r249339, r249369);
double r249371 = r249362 / r249370;
double r249372 = r249355 * r249371;
double r249373 = r249345 ? r249353 : r249372;
return r249373;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 26.7 |
|---|---|
| Target | 0.5 |
| Herbie | 0.6 |
if x < -1.2340170654382657e+37 or 7.170111234031815e+44 < x Initial program 60.3
Simplified56.5
Taylor expanded around inf 1.0
Simplified1.0
if -1.2340170654382657e+37 < x < 7.170111234031815e+44Initial program 0.7
Simplified0.5
rmApplied div-inv0.5
Simplified0.3
Final simplification0.6
herbie shell --seed 2019322 +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)))