Average Error: 29.4 → 1.0
Time: 20.2s
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 -1.535870723425017265441515703700627878683 \cdot 10^{50} \lor \neg \left(z \le 1.053511161193009402933625668226348721359 \cdot 10^{55}\right):\\ \;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 \cdot y + \frac{t}{\frac{{z}^{2}}{y}}\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 -1.535870723425017265441515703700627878683 \cdot 10^{50} \lor \neg \left(z \le 1.053511161193009402933625668226348721359 \cdot 10^{55}\right):\\
\;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 \cdot y + \frac{t}{\frac{{z}^{2}}{y}}\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 r206239 = x;
        double r206240 = y;
        double r206241 = z;
        double r206242 = 3.13060547623;
        double r206243 = r206241 * r206242;
        double r206244 = 11.1667541262;
        double r206245 = r206243 + r206244;
        double r206246 = r206245 * r206241;
        double r206247 = t;
        double r206248 = r206246 + r206247;
        double r206249 = r206248 * r206241;
        double r206250 = a;
        double r206251 = r206249 + r206250;
        double r206252 = r206251 * r206241;
        double r206253 = b;
        double r206254 = r206252 + r206253;
        double r206255 = r206240 * r206254;
        double r206256 = 15.234687407;
        double r206257 = r206241 + r206256;
        double r206258 = r206257 * r206241;
        double r206259 = 31.4690115749;
        double r206260 = r206258 + r206259;
        double r206261 = r206260 * r206241;
        double r206262 = 11.9400905721;
        double r206263 = r206261 + r206262;
        double r206264 = r206263 * r206241;
        double r206265 = 0.607771387771;
        double r206266 = r206264 + r206265;
        double r206267 = r206255 / r206266;
        double r206268 = r206239 + r206267;
        return r206268;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r206269 = z;
        double r206270 = -1.5358707234250173e+50;
        bool r206271 = r206269 <= r206270;
        double r206272 = 1.0535111611930094e+55;
        bool r206273 = r206269 <= r206272;
        double r206274 = !r206273;
        bool r206275 = r206271 || r206274;
        double r206276 = x;
        double r206277 = 3.13060547623;
        double r206278 = y;
        double r206279 = r206277 * r206278;
        double r206280 = t;
        double r206281 = 2.0;
        double r206282 = pow(r206269, r206281);
        double r206283 = r206282 / r206278;
        double r206284 = r206280 / r206283;
        double r206285 = r206279 + r206284;
        double r206286 = 36.527041698806414;
        double r206287 = r206278 / r206269;
        double r206288 = r206286 * r206287;
        double r206289 = r206285 - r206288;
        double r206290 = r206276 + r206289;
        double r206291 = 15.234687407;
        double r206292 = r206269 + r206291;
        double r206293 = r206292 * r206269;
        double r206294 = 31.4690115749;
        double r206295 = r206293 + r206294;
        double r206296 = r206295 * r206269;
        double r206297 = 11.9400905721;
        double r206298 = r206296 + r206297;
        double r206299 = r206298 * r206269;
        double r206300 = 0.607771387771;
        double r206301 = r206299 + r206300;
        double r206302 = r206269 * r206277;
        double r206303 = 11.1667541262;
        double r206304 = r206302 + r206303;
        double r206305 = r206304 * r206269;
        double r206306 = r206305 + r206280;
        double r206307 = r206306 * r206269;
        double r206308 = a;
        double r206309 = r206307 + r206308;
        double r206310 = r206309 * r206269;
        double r206311 = b;
        double r206312 = r206310 + r206311;
        double r206313 = r206301 / r206312;
        double r206314 = r206278 / r206313;
        double r206315 = r206276 + r206314;
        double r206316 = r206275 ? r206290 : r206315;
        return r206316;
}

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.4
Target1.0
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.5358707234250173e+50 or 1.0535111611930094e+55 < z

    1. Initial program 61.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. Taylor expanded around inf 8.0

      \[\leadsto x + \color{blue}{\left(\left(3.130605476229999961645944495103321969509 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.52704169880641416057187598198652267456 \cdot \frac{y}{z}\right)}\]
    3. Using strategy rm
    4. Applied associate-/l*0.9

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

    if -1.5358707234250173e+50 < z < 1.0535111611930094e+55

    1. Initial program 2.6

      \[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*1.1

      \[\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 simplification1.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1.535870723425017265441515703700627878683 \cdot 10^{50} \lor \neg \left(z \le 1.053511161193009402933625668226348721359 \cdot 10^{55}\right):\\ \;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 \cdot y + \frac{t}{\frac{{z}^{2}}{y}}\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 2019304 
(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))))