Average Error: 29.7 → 4.7
Time: 29.6s
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 -1062323905833266034524411178736549560844000 \lor \neg \left(z \le 43462090093737220061812594972643295232\right):\\ \;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.52704169880641416057187598198652267456 \cdot \frac{y}{z}\right)\\ \mathbf{else}:\\ \;\;\;\;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}}\\ \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 -1062323905833266034524411178736549560844000 \lor \neg \left(z \le 43462090093737220061812594972643295232\right):\\
\;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.52704169880641416057187598198652267456 \cdot \frac{y}{z}\right)\\

\mathbf{else}:\\
\;\;\;\;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}}\\

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r271391 = x;
        double r271392 = y;
        double r271393 = z;
        double r271394 = 3.13060547623;
        double r271395 = r271393 * r271394;
        double r271396 = 11.1667541262;
        double r271397 = r271395 + r271396;
        double r271398 = r271397 * r271393;
        double r271399 = t;
        double r271400 = r271398 + r271399;
        double r271401 = r271400 * r271393;
        double r271402 = a;
        double r271403 = r271401 + r271402;
        double r271404 = r271403 * r271393;
        double r271405 = b;
        double r271406 = r271404 + r271405;
        double r271407 = r271392 * r271406;
        double r271408 = 15.234687407;
        double r271409 = r271393 + r271408;
        double r271410 = r271409 * r271393;
        double r271411 = 31.4690115749;
        double r271412 = r271410 + r271411;
        double r271413 = r271412 * r271393;
        double r271414 = 11.9400905721;
        double r271415 = r271413 + r271414;
        double r271416 = r271415 * r271393;
        double r271417 = 0.607771387771;
        double r271418 = r271416 + r271417;
        double r271419 = r271407 / r271418;
        double r271420 = r271391 + r271419;
        return r271420;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r271421 = z;
        double r271422 = -1.062323905833266e+42;
        bool r271423 = r271421 <= r271422;
        double r271424 = 4.346209009373722e+37;
        bool r271425 = r271421 <= r271424;
        double r271426 = !r271425;
        bool r271427 = r271423 || r271426;
        double r271428 = x;
        double r271429 = 3.13060547623;
        double r271430 = y;
        double r271431 = r271429 * r271430;
        double r271432 = t;
        double r271433 = r271432 * r271430;
        double r271434 = 2.0;
        double r271435 = pow(r271421, r271434);
        double r271436 = r271433 / r271435;
        double r271437 = r271431 + r271436;
        double r271438 = 36.527041698806414;
        double r271439 = r271430 / r271421;
        double r271440 = r271438 * r271439;
        double r271441 = r271437 - r271440;
        double r271442 = r271428 + r271441;
        double r271443 = 15.234687407;
        double r271444 = r271421 + r271443;
        double r271445 = r271444 * r271421;
        double r271446 = 31.4690115749;
        double r271447 = r271445 + r271446;
        double r271448 = r271447 * r271421;
        double r271449 = 11.9400905721;
        double r271450 = r271448 + r271449;
        double r271451 = r271450 * r271421;
        double r271452 = 0.607771387771;
        double r271453 = r271451 + r271452;
        double r271454 = r271421 * r271429;
        double r271455 = 11.1667541262;
        double r271456 = r271454 + r271455;
        double r271457 = r271456 * r271421;
        double r271458 = r271457 + r271432;
        double r271459 = r271458 * r271421;
        double r271460 = a;
        double r271461 = r271459 + r271460;
        double r271462 = r271461 * r271421;
        double r271463 = b;
        double r271464 = r271462 + r271463;
        double r271465 = r271453 / r271464;
        double r271466 = r271430 / r271465;
        double r271467 = r271428 + r271466;
        double r271468 = r271427 ? r271442 : r271467;
        return r271468;
}

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.7
Target1.2
Herbie4.7
\[\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.062323905833266e+42 or 4.346209009373722e+37 < z

    1. Initial program 60.0

      \[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. Taylor expanded around inf 8.9

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

    if -1.062323905833266e+42 < z < 4.346209009373722e+37

    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 associate-/l*0.8

      \[\leadsto x + \color{blue}{\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}}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification4.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1062323905833266034524411178736549560844000 \lor \neg \left(z \le 43462090093737220061812594972643295232\right):\\ \;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.52704169880641416057187598198652267456 \cdot \frac{y}{z}\right)\\ \mathbf{else}:\\ \;\;\;\;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}}\\ \end{array}\]

Reproduce

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