\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 -9.168391507400123006303027147886417404254 \cdot 10^{69} \lor \neg \left(x \le 1.930869431253392580588428718419400205994 \cdot 10^{69}\right):\\
\;\;\;\;\mathsf{fma}\left(x, 4.16438922227999963610045597306452691555, \frac{y}{{x}^{2}}\right) - 110.1139242984810806547102401964366436005\\
\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 r252380 = x;
double r252381 = 2.0;
double r252382 = r252380 - r252381;
double r252383 = 4.16438922228;
double r252384 = r252380 * r252383;
double r252385 = 78.6994924154;
double r252386 = r252384 + r252385;
double r252387 = r252386 * r252380;
double r252388 = 137.519416416;
double r252389 = r252387 + r252388;
double r252390 = r252389 * r252380;
double r252391 = y;
double r252392 = r252390 + r252391;
double r252393 = r252392 * r252380;
double r252394 = z;
double r252395 = r252393 + r252394;
double r252396 = r252382 * r252395;
double r252397 = 43.3400022514;
double r252398 = r252380 + r252397;
double r252399 = r252398 * r252380;
double r252400 = 263.505074721;
double r252401 = r252399 + r252400;
double r252402 = r252401 * r252380;
double r252403 = 313.399215894;
double r252404 = r252402 + r252403;
double r252405 = r252404 * r252380;
double r252406 = 47.066876606;
double r252407 = r252405 + r252406;
double r252408 = r252396 / r252407;
return r252408;
}
double f(double x, double y, double z) {
double r252409 = x;
double r252410 = -9.168391507400123e+69;
bool r252411 = r252409 <= r252410;
double r252412 = 1.9308694312533926e+69;
bool r252413 = r252409 <= r252412;
double r252414 = !r252413;
bool r252415 = r252411 || r252414;
double r252416 = 4.16438922228;
double r252417 = y;
double r252418 = 2.0;
double r252419 = pow(r252409, r252418);
double r252420 = r252417 / r252419;
double r252421 = fma(r252409, r252416, r252420);
double r252422 = 110.11392429848108;
double r252423 = r252421 - r252422;
double r252424 = 2.0;
double r252425 = r252409 - r252424;
double r252426 = 78.6994924154;
double r252427 = fma(r252409, r252416, r252426);
double r252428 = 137.519416416;
double r252429 = fma(r252427, r252409, r252428);
double r252430 = fma(r252429, r252409, r252417);
double r252431 = z;
double r252432 = fma(r252430, r252409, r252431);
double r252433 = 43.3400022514;
double r252434 = r252409 + r252433;
double r252435 = 263.505074721;
double r252436 = fma(r252434, r252409, r252435);
double r252437 = 313.399215894;
double r252438 = fma(r252436, r252409, r252437);
double r252439 = 47.066876606;
double r252440 = fma(r252438, r252409, r252439);
double r252441 = r252432 / r252440;
double r252442 = r252425 * r252441;
double r252443 = r252415 ? r252423 : r252442;
return r252443;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 26.8 |
|---|---|
| Target | 0.6 |
| Herbie | 0.5 |
if x < -9.168391507400123e+69 or 1.9308694312533926e+69 < x Initial program 64.0
Simplified62.4
rmApplied flip--62.4
Applied associate-/l/62.4
Taylor expanded around inf 0.0
Simplified0.0
if -9.168391507400123e+69 < x < 1.9308694312533926e+69Initial program 3.4
Simplified1.0
rmApplied div-inv1.0
Simplified0.8
Final simplification0.5
herbie shell --seed 2019323 +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)))