Average Error: 26.6 → 1.2
Time: 26.4s
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 -52919176326804272705496416256:\\ \;\;\;\;\left(x - 2\right) \cdot \left(\left(4.16438922227999963610045597306452691555 - \frac{101.785145853921093817007204052060842514}{x}\right) + \frac{y}{x \cdot \left(x \cdot x\right)}\right)\\ \mathbf{elif}\;x \le 1498395052788.9189453125:\\ \;\;\;\;\frac{\left(x \cdot \left(x \cdot \left(137.5194164160000127594685181975364685059 + \left(78.69949241540000173245061887428164482117 + 4.16438922227999963610045597306452691555 \cdot x\right) \cdot x\right) + y\right) + z\right) \cdot \left(x \cdot x - 2 \cdot 2\right)}{\left(2 + x\right) \cdot \left(\left(\left(\left(43.3400022514000013984514225739985704422 + x\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825\right)}\\ \mathbf{else}:\\ \;\;\;\;\left(4.16438922227999963610045597306452691555 \cdot x - 110.1139242984810948655649553984403610229\right) + \frac{y}{x \cdot x}\\ \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 -52919176326804272705496416256:\\
\;\;\;\;\left(x - 2\right) \cdot \left(\left(4.16438922227999963610045597306452691555 - \frac{101.785145853921093817007204052060842514}{x}\right) + \frac{y}{x \cdot \left(x \cdot x\right)}\right)\\

\mathbf{elif}\;x \le 1498395052788.9189453125:\\
\;\;\;\;\frac{\left(x \cdot \left(x \cdot \left(137.5194164160000127594685181975364685059 + \left(78.69949241540000173245061887428164482117 + 4.16438922227999963610045597306452691555 \cdot x\right) \cdot x\right) + y\right) + z\right) \cdot \left(x \cdot x - 2 \cdot 2\right)}{\left(2 + x\right) \cdot \left(\left(\left(\left(43.3400022514000013984514225739985704422 + x\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825\right)}\\

\mathbf{else}:\\
\;\;\;\;\left(4.16438922227999963610045597306452691555 \cdot x - 110.1139242984810948655649553984403610229\right) + \frac{y}{x \cdot x}\\

\end{array}
double f(double x, double y, double z) {
        double r19716491 = x;
        double r19716492 = 2.0;
        double r19716493 = r19716491 - r19716492;
        double r19716494 = 4.16438922228;
        double r19716495 = r19716491 * r19716494;
        double r19716496 = 78.6994924154;
        double r19716497 = r19716495 + r19716496;
        double r19716498 = r19716497 * r19716491;
        double r19716499 = 137.519416416;
        double r19716500 = r19716498 + r19716499;
        double r19716501 = r19716500 * r19716491;
        double r19716502 = y;
        double r19716503 = r19716501 + r19716502;
        double r19716504 = r19716503 * r19716491;
        double r19716505 = z;
        double r19716506 = r19716504 + r19716505;
        double r19716507 = r19716493 * r19716506;
        double r19716508 = 43.3400022514;
        double r19716509 = r19716491 + r19716508;
        double r19716510 = r19716509 * r19716491;
        double r19716511 = 263.505074721;
        double r19716512 = r19716510 + r19716511;
        double r19716513 = r19716512 * r19716491;
        double r19716514 = 313.399215894;
        double r19716515 = r19716513 + r19716514;
        double r19716516 = r19716515 * r19716491;
        double r19716517 = 47.066876606;
        double r19716518 = r19716516 + r19716517;
        double r19716519 = r19716507 / r19716518;
        return r19716519;
}

double f(double x, double y, double z) {
        double r19716520 = x;
        double r19716521 = -5.291917632680427e+28;
        bool r19716522 = r19716520 <= r19716521;
        double r19716523 = 2.0;
        double r19716524 = r19716520 - r19716523;
        double r19716525 = 4.16438922228;
        double r19716526 = 101.7851458539211;
        double r19716527 = r19716526 / r19716520;
        double r19716528 = r19716525 - r19716527;
        double r19716529 = y;
        double r19716530 = r19716520 * r19716520;
        double r19716531 = r19716520 * r19716530;
        double r19716532 = r19716529 / r19716531;
        double r19716533 = r19716528 + r19716532;
        double r19716534 = r19716524 * r19716533;
        double r19716535 = 1498395052788.919;
        bool r19716536 = r19716520 <= r19716535;
        double r19716537 = 137.519416416;
        double r19716538 = 78.6994924154;
        double r19716539 = r19716525 * r19716520;
        double r19716540 = r19716538 + r19716539;
        double r19716541 = r19716540 * r19716520;
        double r19716542 = r19716537 + r19716541;
        double r19716543 = r19716520 * r19716542;
        double r19716544 = r19716543 + r19716529;
        double r19716545 = r19716520 * r19716544;
        double r19716546 = z;
        double r19716547 = r19716545 + r19716546;
        double r19716548 = r19716523 * r19716523;
        double r19716549 = r19716530 - r19716548;
        double r19716550 = r19716547 * r19716549;
        double r19716551 = r19716523 + r19716520;
        double r19716552 = 43.3400022514;
        double r19716553 = r19716552 + r19716520;
        double r19716554 = r19716553 * r19716520;
        double r19716555 = 263.505074721;
        double r19716556 = r19716554 + r19716555;
        double r19716557 = r19716556 * r19716520;
        double r19716558 = 313.399215894;
        double r19716559 = r19716557 + r19716558;
        double r19716560 = r19716559 * r19716520;
        double r19716561 = 47.066876606;
        double r19716562 = r19716560 + r19716561;
        double r19716563 = r19716551 * r19716562;
        double r19716564 = r19716550 / r19716563;
        double r19716565 = 110.1139242984811;
        double r19716566 = r19716539 - r19716565;
        double r19716567 = r19716529 / r19716530;
        double r19716568 = r19716566 + r19716567;
        double r19716569 = r19716536 ? r19716564 : r19716568;
        double r19716570 = r19716522 ? r19716534 : r19716569;
        return r19716570;
}

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.6
Target0.5
Herbie1.2
\[\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 3 regimes
  2. if x < -5.291917632680427e+28

    1. Initial program 58.4

      \[\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 *-un-lft-identity58.4

      \[\leadsto \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)}{\color{blue}{1 \cdot \left(\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825\right)}}\]
    4. Applied times-frac54.1

      \[\leadsto \color{blue}{\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(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}}\]
    5. Simplified54.1

      \[\leadsto \color{blue}{\left(x - 2\right)} \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(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}\]
    6. Using strategy rm
    7. Applied clear-num54.1

      \[\leadsto \left(x - 2\right) \cdot \color{blue}{\frac{1}{\frac{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}{\left(\left(\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059\right) \cdot x + y\right) \cdot x + z}}}\]
    8. Using strategy rm
    9. Applied div-inv54.1

      \[\leadsto \left(x - 2\right) \cdot \frac{1}{\color{blue}{\left(\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825\right) \cdot \frac{1}{\left(\left(\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059\right) \cdot x + y\right) \cdot x + z}}}\]
    10. Taylor expanded around inf 1.5

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

      \[\leadsto \left(x - 2\right) \cdot \color{blue}{\left(\frac{y}{x \cdot \left(x \cdot x\right)} + \left(4.16438922227999963610045597306452691555 - \frac{101.785145853921093817007204052060842514}{x}\right)\right)}\]

    if -5.291917632680427e+28 < x < 1498395052788.919

    1. Initial program 0.3

      \[\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 flip--0.4

      \[\leadsto \frac{\color{blue}{\frac{x \cdot x - 2 \cdot 2}{x + 2}} \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}\]
    4. Applied associate-*l/0.5

      \[\leadsto \frac{\color{blue}{\frac{\left(x \cdot x - 2 \cdot 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)}{x + 2}}}{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}\]
    5. Applied associate-/l/0.5

      \[\leadsto \color{blue}{\frac{\left(x \cdot x - 2 \cdot 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(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825\right) \cdot \left(x + 2\right)}}\]

    if 1498395052788.919 < x

    1. Initial program 54.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 2.3

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

      \[\leadsto \color{blue}{\frac{y}{x \cdot x} + \left(4.16438922227999963610045597306452691555 \cdot x - 110.1139242984810948655649553984403610229\right)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification1.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -52919176326804272705496416256:\\ \;\;\;\;\left(x - 2\right) \cdot \left(\left(4.16438922227999963610045597306452691555 - \frac{101.785145853921093817007204052060842514}{x}\right) + \frac{y}{x \cdot \left(x \cdot x\right)}\right)\\ \mathbf{elif}\;x \le 1498395052788.9189453125:\\ \;\;\;\;\frac{\left(x \cdot \left(x \cdot \left(137.5194164160000127594685181975364685059 + \left(78.69949241540000173245061887428164482117 + 4.16438922227999963610045597306452691555 \cdot x\right) \cdot x\right) + y\right) + z\right) \cdot \left(x \cdot x - 2 \cdot 2\right)}{\left(2 + x\right) \cdot \left(\left(\left(\left(43.3400022514000013984514225739985704422 + x\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825\right)}\\ \mathbf{else}:\\ \;\;\;\;\left(4.16438922227999963610045597306452691555 \cdot x - 110.1139242984810948655649553984403610229\right) + \frac{y}{x \cdot x}\\ \end{array}\]

Reproduce

herbie shell --seed 2019172 
(FPCore (x y z)
  :name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, C"

  :herbie-target
  (if (< x -3.326128725870005e+62) (- (+ (/ y (* x x)) (* 4.16438922228 x)) 110.1139242984811) (if (< x 9.429991714554673e+55) (* (/ (- x 2.0) 1.0) (/ (+ (* (+ (* (+ (* (+ (* 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.0) (+ (* (+ (* (+ (* (+ (* x 4.16438922228) 78.6994924154) x) 137.519416416) x) y) x) z)) (+ (* (+ (* (+ (* (+ x 43.3400022514) x) 263.505074721) x) 313.399215894) x) 47.066876606)))