Average Error: 29.8 → 1.0
Time: 13.1s
Precision: 64
\[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\]
\[\begin{array}{l} \mathbf{if}\;z \le -11624782542279748957513389138715344896 \lor \neg \left(z \le 10777062381923829772959595117903421112320\right):\\ \;\;\;\;x + y \cdot \left(\left(\frac{t}{{z}^{2}} + 3.130605476229999961645944495103321969509\right) - 36.52704169880641416057187598198652267456 \cdot \frac{1}{z}\right)\\ \mathbf{else}:\\ \;\;\;\;x + y \cdot \frac{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\\ \end{array}\]
x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}
\begin{array}{l}
\mathbf{if}\;z \le -11624782542279748957513389138715344896 \lor \neg \left(z \le 10777062381923829772959595117903421112320\right):\\
\;\;\;\;x + y \cdot \left(\left(\frac{t}{{z}^{2}} + 3.130605476229999961645944495103321969509\right) - 36.52704169880641416057187598198652267456 \cdot \frac{1}{z}\right)\\

\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\\

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r278478 = x;
        double r278479 = y;
        double r278480 = z;
        double r278481 = 3.13060547623;
        double r278482 = r278480 * r278481;
        double r278483 = 11.1667541262;
        double r278484 = r278482 + r278483;
        double r278485 = r278484 * r278480;
        double r278486 = t;
        double r278487 = r278485 + r278486;
        double r278488 = r278487 * r278480;
        double r278489 = a;
        double r278490 = r278488 + r278489;
        double r278491 = r278490 * r278480;
        double r278492 = b;
        double r278493 = r278491 + r278492;
        double r278494 = r278479 * r278493;
        double r278495 = 15.234687407;
        double r278496 = r278480 + r278495;
        double r278497 = r278496 * r278480;
        double r278498 = 31.4690115749;
        double r278499 = r278497 + r278498;
        double r278500 = r278499 * r278480;
        double r278501 = 11.9400905721;
        double r278502 = r278500 + r278501;
        double r278503 = r278502 * r278480;
        double r278504 = 0.607771387771;
        double r278505 = r278503 + r278504;
        double r278506 = r278494 / r278505;
        double r278507 = r278478 + r278506;
        return r278507;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r278508 = z;
        double r278509 = -1.162478254227975e+37;
        bool r278510 = r278508 <= r278509;
        double r278511 = 1.077706238192383e+40;
        bool r278512 = r278508 <= r278511;
        double r278513 = !r278512;
        bool r278514 = r278510 || r278513;
        double r278515 = x;
        double r278516 = y;
        double r278517 = t;
        double r278518 = 2.0;
        double r278519 = pow(r278508, r278518);
        double r278520 = r278517 / r278519;
        double r278521 = 3.13060547623;
        double r278522 = r278520 + r278521;
        double r278523 = 36.527041698806414;
        double r278524 = 1.0;
        double r278525 = r278524 / r278508;
        double r278526 = r278523 * r278525;
        double r278527 = r278522 - r278526;
        double r278528 = r278516 * r278527;
        double r278529 = r278515 + r278528;
        double r278530 = r278508 * r278521;
        double r278531 = 11.1667541262;
        double r278532 = r278530 + r278531;
        double r278533 = r278532 * r278508;
        double r278534 = r278533 + r278517;
        double r278535 = r278534 * r278508;
        double r278536 = a;
        double r278537 = r278535 + r278536;
        double r278538 = r278537 * r278508;
        double r278539 = b;
        double r278540 = r278538 + r278539;
        double r278541 = 15.234687407;
        double r278542 = r278508 + r278541;
        double r278543 = r278542 * r278508;
        double r278544 = 31.4690115749;
        double r278545 = r278543 + r278544;
        double r278546 = r278545 * r278508;
        double r278547 = 11.9400905721;
        double r278548 = r278546 + r278547;
        double r278549 = r278548 * r278508;
        double r278550 = 0.607771387771;
        double r278551 = r278549 + r278550;
        double r278552 = r278540 / r278551;
        double r278553 = r278516 * r278552;
        double r278554 = r278515 + r278553;
        double r278555 = r278514 ? r278529 : r278554;
        return r278555;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Bits error versus b

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original29.8
Target1.1
Herbie1.0
\[\begin{array}{l} \mathbf{if}\;z \lt -6.499344996252631754123144978817242590467 \cdot 10^{53}:\\ \;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 - \frac{36.52704169880641416057187598198652267456}{z}\right) + \frac{t}{z \cdot z}\right) \cdot \frac{y}{1}\\ \mathbf{elif}\;z \lt 7.066965436914286795694558389038333165002 \cdot 10^{59}:\\ \;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}}\\ \mathbf{else}:\\ \;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 - \frac{36.52704169880641416057187598198652267456}{z}\right) + \frac{t}{z \cdot z}\right) \cdot \frac{y}{1}\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if z < -1.162478254227975e+37 or 1.077706238192383e+40 < z

    1. Initial program 59.8

      \[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity59.8

      \[\leadsto x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\color{blue}{1 \cdot \left(\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227\right)}}\]
    4. Applied times-frac57.1

      \[\leadsto x + \color{blue}{\frac{y}{1} \cdot \frac{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}}\]
    5. Simplified57.1

      \[\leadsto x + \color{blue}{y} \cdot \frac{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\]
    6. Taylor expanded around inf 1.2

      \[\leadsto x + y \cdot \color{blue}{\left(\left(\frac{t}{{z}^{2}} + 3.130605476229999961645944495103321969509\right) - 36.52704169880641416057187598198652267456 \cdot \frac{1}{z}\right)}\]

    if -1.162478254227975e+37 < z < 1.077706238192383e+40

    1. Initial program 1.7

      \[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity1.7

      \[\leadsto x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\color{blue}{1 \cdot \left(\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227\right)}}\]
    4. Applied times-frac0.7

      \[\leadsto x + \color{blue}{\frac{y}{1} \cdot \frac{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}}\]
    5. Simplified0.7

      \[\leadsto x + \color{blue}{y} \cdot \frac{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -11624782542279748957513389138715344896 \lor \neg \left(z \le 10777062381923829772959595117903421112320\right):\\ \;\;\;\;x + y \cdot \left(\left(\frac{t}{{z}^{2}} + 3.130605476229999961645944495103321969509\right) - 36.52704169880641416057187598198652267456 \cdot \frac{1}{z}\right)\\ \mathbf{else}:\\ \;\;\;\;x + y \cdot \frac{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\\ \end{array}\]

Reproduce

herbie shell --seed 2019308 
(FPCore (x y z t a b)
  :name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, D"
  :precision binary64

  :herbie-target
  (if (< z -6.4993449962526318e53) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1))) (if (< z 7.0669654369142868e59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004) (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1)))))

  (+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004))))