Average Error: 26.7 → 0.7
Time: 18.5s
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 -41468195884167556148326040140678955008 \lor \neg \left(x \le 4.185814178876573776200097393718801150489 \cdot 10^{51}\right):\\ \;\;\;\;\left(\frac{y}{{x}^{2}} + \frac{4688685437421479}{1125899906842624} \cdot x\right) - \frac{1937144642339619}{17592186044416}\\ \mathbf{else}:\\ \;\;\;\;\frac{x - 2}{\frac{\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}}{\left(\left(\left(x \cdot \frac{4688685437421479}{1125899906842624} + \frac{5537984448691291}{70368744177664}\right) \cdot x + \frac{604816789577447}{4398046511104}\right) \cdot x + y\right) \cdot x + z}}\\ \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 -41468195884167556148326040140678955008 \lor \neg \left(x \le 4.185814178876573776200097393718801150489 \cdot 10^{51}\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + \frac{4688685437421479}{1125899906842624} \cdot x\right) - \frac{1937144642339619}{17592186044416}\\

\mathbf{else}:\\
\;\;\;\;\frac{x - 2}{\frac{\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}}{\left(\left(\left(x \cdot \frac{4688685437421479}{1125899906842624} + \frac{5537984448691291}{70368744177664}\right) \cdot x + \frac{604816789577447}{4398046511104}\right) \cdot x + y\right) \cdot x + z}}\\

\end{array}
double f(double x, double y, double z) {
        double r252271 = x;
        double r252272 = 2.0;
        double r252273 = r252271 - r252272;
        double r252274 = 4.16438922228;
        double r252275 = r252271 * r252274;
        double r252276 = 78.6994924154;
        double r252277 = r252275 + r252276;
        double r252278 = r252277 * r252271;
        double r252279 = 137.519416416;
        double r252280 = r252278 + r252279;
        double r252281 = r252280 * r252271;
        double r252282 = y;
        double r252283 = r252281 + r252282;
        double r252284 = r252283 * r252271;
        double r252285 = z;
        double r252286 = r252284 + r252285;
        double r252287 = r252273 * r252286;
        double r252288 = 43.3400022514;
        double r252289 = r252271 + r252288;
        double r252290 = r252289 * r252271;
        double r252291 = 263.505074721;
        double r252292 = r252290 + r252291;
        double r252293 = r252292 * r252271;
        double r252294 = 313.399215894;
        double r252295 = r252293 + r252294;
        double r252296 = r252295 * r252271;
        double r252297 = 47.066876606;
        double r252298 = r252296 + r252297;
        double r252299 = r252287 / r252298;
        return r252299;
}

double f(double x, double y, double z) {
        double r252300 = x;
        double r252301 = -4.1468195884167556e+37;
        bool r252302 = r252300 <= r252301;
        double r252303 = 4.185814178876574e+51;
        bool r252304 = r252300 <= r252303;
        double r252305 = !r252304;
        bool r252306 = r252302 || r252305;
        double r252307 = y;
        double r252308 = 2.0;
        double r252309 = pow(r252300, r252308);
        double r252310 = r252307 / r252309;
        double r252311 = 4688685437421479.0;
        double r252312 = 1125899906842624.0;
        double r252313 = r252311 / r252312;
        double r252314 = r252313 * r252300;
        double r252315 = r252310 + r252314;
        double r252316 = 1937144642339619.0;
        double r252317 = 17592186044416.0;
        double r252318 = r252316 / r252317;
        double r252319 = r252315 - r252318;
        double r252320 = 2.0;
        double r252321 = r252300 - r252320;
        double r252322 = 6099563062176297.0;
        double r252323 = 140737488355328.0;
        double r252324 = r252322 / r252323;
        double r252325 = r252300 + r252324;
        double r252326 = r252325 * r252300;
        double r252327 = 1158907574534893.0;
        double r252328 = 4398046511104.0;
        double r252329 = r252327 / r252328;
        double r252330 = r252326 + r252329;
        double r252331 = r252330 * r252300;
        double r252332 = 172293041005667.0;
        double r252333 = 549755813888.0;
        double r252334 = r252332 / r252333;
        double r252335 = r252331 + r252334;
        double r252336 = r252335 * r252300;
        double r252337 = 6624073998258585.0;
        double r252338 = r252337 / r252323;
        double r252339 = r252336 + r252338;
        double r252340 = r252300 * r252313;
        double r252341 = 5537984448691291.0;
        double r252342 = 70368744177664.0;
        double r252343 = r252341 / r252342;
        double r252344 = r252340 + r252343;
        double r252345 = r252344 * r252300;
        double r252346 = 604816789577447.0;
        double r252347 = r252346 / r252328;
        double r252348 = r252345 + r252347;
        double r252349 = r252348 * r252300;
        double r252350 = r252349 + r252307;
        double r252351 = r252350 * r252300;
        double r252352 = z;
        double r252353 = r252351 + r252352;
        double r252354 = r252339 / r252353;
        double r252355 = r252321 / r252354;
        double r252356 = r252306 ? r252319 : r252355;
        return r252356;
}

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.7
Target0.4
Herbie0.7
\[\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 < -4.1468195884167556e+37 or 4.185814178876574e+51 < x

    1. Initial program 60.8

      \[\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 0.7

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

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

    if -4.1468195884167556e+37 < x < 4.185814178876574e+51

    1. Initial program 0.9

      \[\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 associate-/l*0.7

      \[\leadsto \color{blue}{\frac{x - 2}{\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}}}\]
    4. Simplified0.7

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -41468195884167556148326040140678955008 \lor \neg \left(x \le 4.185814178876573776200097393718801150489 \cdot 10^{51}\right):\\ \;\;\;\;\left(\frac{y}{{x}^{2}} + \frac{4688685437421479}{1125899906842624} \cdot x\right) - \frac{1937144642339619}{17592186044416}\\ \mathbf{else}:\\ \;\;\;\;\frac{x - 2}{\frac{\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}}{\left(\left(\left(x \cdot \frac{4688685437421479}{1125899906842624} + \frac{5537984448691291}{70368744177664}\right) \cdot x + \frac{604816789577447}{4398046511104}\right) \cdot x + y\right) \cdot x + z}}\\ \end{array}\]

Reproduce

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