Average Error: 26.1 → 1.1
Time: 29.8s
Precision: 64
\[\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 -2252101360098186826350592 \lor \neg \left(x \le 14456844266184348924014231552\right):\\ \;\;\;\;\left(\frac{y}{{x}^{2}} + \frac{4688685437421479}{1125899906842624} \cdot x\right) - \frac{1937144642339619}{17592186044416}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(x - 2\right) \cdot \left(\left(\sqrt{\left(x \cdot \frac{4688685437421479}{1125899906842624} + \frac{5537984448691291}{70368744177664}\right) \cdot x + \frac{604816789577447}{4398046511104}} \cdot \left(\sqrt{\left(x \cdot \frac{4688685437421479}{1125899906842624} + \frac{5537984448691291}{70368744177664}\right) \cdot x + \frac{604816789577447}{4398046511104}} \cdot x\right) + y\right) \cdot x + z\right)}{\left(\left(\left(x + \frac{6099563062176297}{140737488355328}\right) \cdot x + \frac{1158907574534893}{4398046511104}\right) \cdot x + \frac{172293041005667}{549755813888}\right) \cdot x + \frac{6624073998258585}{140737488355328}}\\ \end{array}\]
\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 -2252101360098186826350592 \lor \neg \left(x \le 14456844266184348924014231552\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + \frac{4688685437421479}{1125899906842624} \cdot x\right) - \frac{1937144642339619}{17592186044416}\\

\mathbf{else}:\\
\;\;\;\;\frac{\left(x - 2\right) \cdot \left(\left(\sqrt{\left(x \cdot \frac{4688685437421479}{1125899906842624} + \frac{5537984448691291}{70368744177664}\right) \cdot x + \frac{604816789577447}{4398046511104}} \cdot \left(\sqrt{\left(x \cdot \frac{4688685437421479}{1125899906842624} + \frac{5537984448691291}{70368744177664}\right) \cdot x + \frac{604816789577447}{4398046511104}} \cdot x\right) + y\right) \cdot x + z\right)}{\left(\left(\left(x + \frac{6099563062176297}{140737488355328}\right) \cdot x + \frac{1158907574534893}{4398046511104}\right) \cdot x + \frac{172293041005667}{549755813888}\right) \cdot x + \frac{6624073998258585}{140737488355328}}\\

\end{array}
double f(double x, double y, double z) {
        double r316513 = x;
        double r316514 = 2.0;
        double r316515 = r316513 - r316514;
        double r316516 = 4.16438922228;
        double r316517 = r316513 * r316516;
        double r316518 = 78.6994924154;
        double r316519 = r316517 + r316518;
        double r316520 = r316519 * r316513;
        double r316521 = 137.519416416;
        double r316522 = r316520 + r316521;
        double r316523 = r316522 * r316513;
        double r316524 = y;
        double r316525 = r316523 + r316524;
        double r316526 = r316525 * r316513;
        double r316527 = z;
        double r316528 = r316526 + r316527;
        double r316529 = r316515 * r316528;
        double r316530 = 43.3400022514;
        double r316531 = r316513 + r316530;
        double r316532 = r316531 * r316513;
        double r316533 = 263.505074721;
        double r316534 = r316532 + r316533;
        double r316535 = r316534 * r316513;
        double r316536 = 313.399215894;
        double r316537 = r316535 + r316536;
        double r316538 = r316537 * r316513;
        double r316539 = 47.066876606;
        double r316540 = r316538 + r316539;
        double r316541 = r316529 / r316540;
        return r316541;
}

double f(double x, double y, double z) {
        double r316542 = x;
        double r316543 = -2.2521013600981868e+24;
        bool r316544 = r316542 <= r316543;
        double r316545 = 1.445684426618435e+28;
        bool r316546 = r316542 <= r316545;
        double r316547 = !r316546;
        bool r316548 = r316544 || r316547;
        double r316549 = y;
        double r316550 = 2.0;
        double r316551 = pow(r316542, r316550);
        double r316552 = r316549 / r316551;
        double r316553 = 4688685437421479.0;
        double r316554 = 1125899906842624.0;
        double r316555 = r316553 / r316554;
        double r316556 = r316555 * r316542;
        double r316557 = r316552 + r316556;
        double r316558 = 1937144642339619.0;
        double r316559 = 17592186044416.0;
        double r316560 = r316558 / r316559;
        double r316561 = r316557 - r316560;
        double r316562 = 2.0;
        double r316563 = r316542 - r316562;
        double r316564 = r316542 * r316555;
        double r316565 = 5537984448691291.0;
        double r316566 = 70368744177664.0;
        double r316567 = r316565 / r316566;
        double r316568 = r316564 + r316567;
        double r316569 = r316568 * r316542;
        double r316570 = 604816789577447.0;
        double r316571 = 4398046511104.0;
        double r316572 = r316570 / r316571;
        double r316573 = r316569 + r316572;
        double r316574 = sqrt(r316573);
        double r316575 = r316574 * r316542;
        double r316576 = r316574 * r316575;
        double r316577 = r316576 + r316549;
        double r316578 = r316577 * r316542;
        double r316579 = z;
        double r316580 = r316578 + r316579;
        double r316581 = r316563 * r316580;
        double r316582 = 6099563062176297.0;
        double r316583 = 140737488355328.0;
        double r316584 = r316582 / r316583;
        double r316585 = r316542 + r316584;
        double r316586 = r316585 * r316542;
        double r316587 = 1158907574534893.0;
        double r316588 = r316587 / r316571;
        double r316589 = r316586 + r316588;
        double r316590 = r316589 * r316542;
        double r316591 = 172293041005667.0;
        double r316592 = 549755813888.0;
        double r316593 = r316591 / r316592;
        double r316594 = r316590 + r316593;
        double r316595 = r316594 * r316542;
        double r316596 = 6624073998258585.0;
        double r316597 = r316596 / r316583;
        double r316598 = r316595 + r316597;
        double r316599 = r316581 / r316598;
        double r316600 = r316548 ? r316561 : r316599;
        return r316600;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original26.1
Target0.6
Herbie1.1
\[\begin{array}{l} \mathbf{if}\;x \lt -3.326128725870004842699683658678411714981 \cdot 10^{62}:\\ \;\;\;\;\left(\frac{y}{x \cdot x} + 4.16438922227999963610045597306452691555 \cdot x\right) - 110.1139242984810948655649553984403610229\\ \mathbf{elif}\;x \lt 9.429991714554672672712552870340896976735 \cdot 10^{55}:\\ \;\;\;\;\frac{x - 2}{1} \cdot \frac{\left(\left(\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059\right) \cdot x + y\right) \cdot x + z}{\left(\left(263.5050747210000281484099105000495910645 \cdot x + \left(43.3400022514000013984514225739985704422 \cdot \left(x \cdot x\right) + x \cdot \left(x \cdot x\right)\right)\right) + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{y}{x \cdot x} + 4.16438922227999963610045597306452691555 \cdot x\right) - 110.1139242984810948655649553984403610229\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if x < -2.2521013600981868e+24 or 1.445684426618435e+28 < x

    1. Initial program 57.5

      \[\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}\]
    2. Taylor expanded around inf 1.6

      \[\leadsto \color{blue}{\left(\frac{y}{{x}^{2}} + 4.16438922227999963610045597306452691555 \cdot x\right) - 110.1139242984810948655649553984403610229}\]
    3. Simplified1.6

      \[\leadsto \color{blue}{\left(\frac{y}{{x}^{2}} + \frac{4688685437421479}{1125899906842624} \cdot x\right) - \frac{1937144642339619}{17592186044416}}\]

    if -2.2521013600981868e+24 < x < 1.445684426618435e+28

    1. Initial program 0.6

      \[\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}\]
    2. Using strategy rm
    3. Applied add-sqr-sqrt0.7

      \[\leadsto \frac{\left(x - 2\right) \cdot \left(\left(\color{blue}{\left(\sqrt{\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059} \cdot \sqrt{\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}\]
    4. Applied associate-*l*0.7

      \[\leadsto \frac{\left(x - 2\right) \cdot \left(\left(\color{blue}{\sqrt{\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059} \cdot \left(\sqrt{\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059} \cdot x\right)} + 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}\]
    5. Simplified0.7

      \[\leadsto \frac{\left(x - 2\right) \cdot \left(\left(\sqrt{\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059} \cdot \color{blue}{\left(\sqrt{\left(x \cdot \frac{4688685437421479}{1125899906842624} + \frac{5537984448691291}{70368744177664}\right) \cdot x + \frac{604816789577447}{4398046511104}} \cdot x\right)} + 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}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -2252101360098186826350592 \lor \neg \left(x \le 14456844266184348924014231552\right):\\ \;\;\;\;\left(\frac{y}{{x}^{2}} + \frac{4688685437421479}{1125899906842624} \cdot x\right) - \frac{1937144642339619}{17592186044416}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(x - 2\right) \cdot \left(\left(\sqrt{\left(x \cdot \frac{4688685437421479}{1125899906842624} + \frac{5537984448691291}{70368744177664}\right) \cdot x + \frac{604816789577447}{4398046511104}} \cdot \left(\sqrt{\left(x \cdot \frac{4688685437421479}{1125899906842624} + \frac{5537984448691291}{70368744177664}\right) \cdot x + \frac{604816789577447}{4398046511104}} \cdot x\right) + y\right) \cdot x + z\right)}{\left(\left(\left(x + \frac{6099563062176297}{140737488355328}\right) \cdot x + \frac{1158907574534893}{4398046511104}\right) \cdot x + \frac{172293041005667}{549755813888}\right) \cdot x + \frac{6624073998258585}{140737488355328}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019303 
(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)))