x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\begin{array}{l}
\mathbf{if}\;z \le -1902322427.9406998157501220703125 \lor \neg \left(z \le 1882374506400.410888671875\right):\\
\;\;\;\;x + \left(0.07512208616047560960637952121032867580652 \cdot \frac{y}{z} + 0.06929105992918889456166908757950295694172 \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{1}{\frac{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}}\\
\end{array}double f(double x, double y, double z) {
double r338504 = x;
double r338505 = y;
double r338506 = z;
double r338507 = 0.0692910599291889;
double r338508 = r338506 * r338507;
double r338509 = 0.4917317610505968;
double r338510 = r338508 + r338509;
double r338511 = r338510 * r338506;
double r338512 = 0.279195317918525;
double r338513 = r338511 + r338512;
double r338514 = r338505 * r338513;
double r338515 = 6.012459259764103;
double r338516 = r338506 + r338515;
double r338517 = r338516 * r338506;
double r338518 = 3.350343815022304;
double r338519 = r338517 + r338518;
double r338520 = r338514 / r338519;
double r338521 = r338504 + r338520;
return r338521;
}
double f(double x, double y, double z) {
double r338522 = z;
double r338523 = -1902322427.9406998;
bool r338524 = r338522 <= r338523;
double r338525 = 1882374506400.411;
bool r338526 = r338522 <= r338525;
double r338527 = !r338526;
bool r338528 = r338524 || r338527;
double r338529 = x;
double r338530 = 0.07512208616047561;
double r338531 = y;
double r338532 = r338531 / r338522;
double r338533 = r338530 * r338532;
double r338534 = 0.0692910599291889;
double r338535 = r338534 * r338531;
double r338536 = r338533 + r338535;
double r338537 = r338529 + r338536;
double r338538 = 1.0;
double r338539 = 6.012459259764103;
double r338540 = r338522 + r338539;
double r338541 = r338540 * r338522;
double r338542 = 3.350343815022304;
double r338543 = r338541 + r338542;
double r338544 = r338522 * r338534;
double r338545 = 0.4917317610505968;
double r338546 = r338544 + r338545;
double r338547 = r338546 * r338522;
double r338548 = 0.279195317918525;
double r338549 = r338547 + r338548;
double r338550 = r338531 * r338549;
double r338551 = r338543 / r338550;
double r338552 = r338538 / r338551;
double r338553 = r338529 + r338552;
double r338554 = r338528 ? r338537 : r338553;
return r338554;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.3 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
if z < -1902322427.9406998 or 1882374506400.411 < z Initial program 41.4
Taylor expanded around inf 0.0
if -1902322427.9406998 < z < 1882374506400.411Initial program 0.2
rmApplied clear-num0.2
Final simplification0.1
herbie shell --seed 2019354
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(if (< z -8120153.652456675) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x)) (if (< z 657611897278737680000) (+ x (* (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (/ 1 (+ (* (+ z 6.012459259764103) z) 3.350343815022304)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x))))
(+ x (/ (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (+ (* (+ z 6.012459259764103) z) 3.350343815022304))))