\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 -32986745579037009546076749824 \lor \neg \left(x \le 2501382024595968964723726090240\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999963610045597306452691555 \cdot x\right) - 110.1139242984810948655649553984403610229\\
\mathbf{else}:\\
\;\;\;\;\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(\frac{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x\right) \cdot \left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x\right) - 263.5050747210000281484099105000495910645 \cdot 263.5050747210000281484099105000495910645\right) \cdot x}{\left(x + 43.3400022514000013984514225739985704422\right) \cdot x - 263.5050747210000281484099105000495910645} + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}\\
\end{array}double f(double x, double y, double z) {
double r284536 = x;
double r284537 = 2.0;
double r284538 = r284536 - r284537;
double r284539 = 4.16438922228;
double r284540 = r284536 * r284539;
double r284541 = 78.6994924154;
double r284542 = r284540 + r284541;
double r284543 = r284542 * r284536;
double r284544 = 137.519416416;
double r284545 = r284543 + r284544;
double r284546 = r284545 * r284536;
double r284547 = y;
double r284548 = r284546 + r284547;
double r284549 = r284548 * r284536;
double r284550 = z;
double r284551 = r284549 + r284550;
double r284552 = r284538 * r284551;
double r284553 = 43.3400022514;
double r284554 = r284536 + r284553;
double r284555 = r284554 * r284536;
double r284556 = 263.505074721;
double r284557 = r284555 + r284556;
double r284558 = r284557 * r284536;
double r284559 = 313.399215894;
double r284560 = r284558 + r284559;
double r284561 = r284560 * r284536;
double r284562 = 47.066876606;
double r284563 = r284561 + r284562;
double r284564 = r284552 / r284563;
return r284564;
}
double f(double x, double y, double z) {
double r284565 = x;
double r284566 = -3.298674557903701e+28;
bool r284567 = r284565 <= r284566;
double r284568 = 2.501382024595969e+30;
bool r284569 = r284565 <= r284568;
double r284570 = !r284569;
bool r284571 = r284567 || r284570;
double r284572 = y;
double r284573 = 2.0;
double r284574 = pow(r284565, r284573);
double r284575 = r284572 / r284574;
double r284576 = 4.16438922228;
double r284577 = r284576 * r284565;
double r284578 = r284575 + r284577;
double r284579 = 110.1139242984811;
double r284580 = r284578 - r284579;
double r284581 = 2.0;
double r284582 = r284565 - r284581;
double r284583 = r284565 * r284576;
double r284584 = 78.6994924154;
double r284585 = r284583 + r284584;
double r284586 = r284585 * r284565;
double r284587 = 137.519416416;
double r284588 = r284586 + r284587;
double r284589 = r284588 * r284565;
double r284590 = r284589 + r284572;
double r284591 = r284590 * r284565;
double r284592 = z;
double r284593 = r284591 + r284592;
double r284594 = r284582 * r284593;
double r284595 = 43.3400022514;
double r284596 = r284565 + r284595;
double r284597 = r284596 * r284565;
double r284598 = r284597 * r284597;
double r284599 = 263.505074721;
double r284600 = r284599 * r284599;
double r284601 = r284598 - r284600;
double r284602 = r284601 * r284565;
double r284603 = r284597 - r284599;
double r284604 = r284602 / r284603;
double r284605 = 313.399215894;
double r284606 = r284604 + r284605;
double r284607 = r284606 * r284565;
double r284608 = 47.066876606;
double r284609 = r284607 + r284608;
double r284610 = r284594 / r284609;
double r284611 = r284571 ? r284580 : r284610;
return r284611;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.7 |
|---|---|
| Target | 0.5 |
| Herbie | 0.9 |
if x < -3.298674557903701e+28 or 2.501382024595969e+30 < x Initial program 58.5
Taylor expanded around inf 1.2
if -3.298674557903701e+28 < x < 2.501382024595969e+30Initial program 0.6
rmApplied flip-+0.6
Applied associate-*l/0.6
Final simplification0.9
herbie shell --seed 2019306
(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)))