Average Error: 20.4 → 0.3
Time: 9.4s
Precision: 64
\[x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\]
\[\begin{array}{l} \mathbf{if}\;z \le -252224470884185145344 \lor \neg \left(z \le \frac{7611215845031975}{4722366482869645213696}\right):\\ \;\;\;\;x + \left(\left(\frac{1353279196958449}{18014398509481984} \cdot \frac{y}{z} + \frac{4992947066835229}{72057594037927936} \cdot y\right) - \frac{7289022650859423}{18014398509481984} \cdot \frac{y}{{z}^{2}}\right)\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y \cdot \left(\left(z \cdot \frac{4992947066835229}{72057594037927936} + \frac{4429125951667411}{9007199254740992}\right) \cdot z\right) + y \cdot \frac{5029535718965825}{18014398509481984}}{\left(z + \frac{1692356830115869}{281474976710656}\right) \cdot z + \frac{7544303578448747}{2251799813685248}}\\ \end{array}\]
x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}
\begin{array}{l}
\mathbf{if}\;z \le -252224470884185145344 \lor \neg \left(z \le \frac{7611215845031975}{4722366482869645213696}\right):\\
\;\;\;\;x + \left(\left(\frac{1353279196958449}{18014398509481984} \cdot \frac{y}{z} + \frac{4992947066835229}{72057594037927936} \cdot y\right) - \frac{7289022650859423}{18014398509481984} \cdot \frac{y}{{z}^{2}}\right)\\

\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(\left(z \cdot \frac{4992947066835229}{72057594037927936} + \frac{4429125951667411}{9007199254740992}\right) \cdot z\right) + y \cdot \frac{5029535718965825}{18014398509481984}}{\left(z + \frac{1692356830115869}{281474976710656}\right) \cdot z + \frac{7544303578448747}{2251799813685248}}\\

\end{array}
double f(double x, double y, double z) {
        double r317495 = x;
        double r317496 = y;
        double r317497 = z;
        double r317498 = 0.0692910599291889;
        double r317499 = r317497 * r317498;
        double r317500 = 0.4917317610505968;
        double r317501 = r317499 + r317500;
        double r317502 = r317501 * r317497;
        double r317503 = 0.279195317918525;
        double r317504 = r317502 + r317503;
        double r317505 = r317496 * r317504;
        double r317506 = 6.012459259764103;
        double r317507 = r317497 + r317506;
        double r317508 = r317507 * r317497;
        double r317509 = 3.350343815022304;
        double r317510 = r317508 + r317509;
        double r317511 = r317505 / r317510;
        double r317512 = r317495 + r317511;
        return r317512;
}

double f(double x, double y, double z) {
        double r317513 = z;
        double r317514 = -2.5222447088418515e+20;
        bool r317515 = r317513 <= r317514;
        double r317516 = 7611215845031975.0;
        double r317517 = 4.722366482869645e+21;
        double r317518 = r317516 / r317517;
        bool r317519 = r317513 <= r317518;
        double r317520 = !r317519;
        bool r317521 = r317515 || r317520;
        double r317522 = x;
        double r317523 = 1353279196958449.0;
        double r317524 = 18014398509481984.0;
        double r317525 = r317523 / r317524;
        double r317526 = y;
        double r317527 = r317526 / r317513;
        double r317528 = r317525 * r317527;
        double r317529 = 4992947066835229.0;
        double r317530 = 7.205759403792794e+16;
        double r317531 = r317529 / r317530;
        double r317532 = r317531 * r317526;
        double r317533 = r317528 + r317532;
        double r317534 = 7289022650859423.0;
        double r317535 = r317534 / r317524;
        double r317536 = 2.0;
        double r317537 = pow(r317513, r317536);
        double r317538 = r317526 / r317537;
        double r317539 = r317535 * r317538;
        double r317540 = r317533 - r317539;
        double r317541 = r317522 + r317540;
        double r317542 = r317513 * r317531;
        double r317543 = 4429125951667411.0;
        double r317544 = 9007199254740992.0;
        double r317545 = r317543 / r317544;
        double r317546 = r317542 + r317545;
        double r317547 = r317546 * r317513;
        double r317548 = r317526 * r317547;
        double r317549 = 5029535718965825.0;
        double r317550 = r317549 / r317524;
        double r317551 = r317526 * r317550;
        double r317552 = r317548 + r317551;
        double r317553 = 1692356830115869.0;
        double r317554 = 281474976710656.0;
        double r317555 = r317553 / r317554;
        double r317556 = r317513 + r317555;
        double r317557 = r317556 * r317513;
        double r317558 = 7544303578448747.0;
        double r317559 = 2251799813685248.0;
        double r317560 = r317558 / r317559;
        double r317561 = r317557 + r317560;
        double r317562 = r317552 / r317561;
        double r317563 = r317522 + r317562;
        double r317564 = r317521 ? r317541 : r317563;
        return r317564;
}

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

Original20.4
Target0.2
Herbie0.3
\[\begin{array}{l} \mathbf{if}\;z \lt -8120153.6524566747248172760009765625:\\ \;\;\;\;\left(\frac{0.07512208616047560960637952121032867580652}{z} + 0.06929105992918889456166908757950295694172\right) \cdot y - \left(\frac{0.4046220386999212492717958866705885156989 \cdot y}{z \cdot z} - x\right)\\ \mathbf{elif}\;z \lt 657611897278737678336:\\ \;\;\;\;x + \left(y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)\right) \cdot \frac{1}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{0.07512208616047560960637952121032867580652}{z} + 0.06929105992918889456166908757950295694172\right) \cdot y - \left(\frac{0.4046220386999212492717958866705885156989 \cdot y}{z \cdot z} - x\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if z < -2.5222447088418515e+20 or 1.611737647351516e-06 < z

    1. Initial program 41.7

      \[x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\]
    2. Simplified41.7

      \[\leadsto \color{blue}{x + \frac{y \cdot \left(\left(z \cdot \frac{4992947066835229}{72057594037927936} + \frac{4429125951667411}{9007199254740992}\right) \cdot z + \frac{5029535718965825}{18014398509481984}\right)}{\left(z + \frac{1692356830115869}{281474976710656}\right) \cdot z + \frac{7544303578448747}{2251799813685248}}}\]
    3. Using strategy rm
    4. Applied associate-/l*33.5

      \[\leadsto x + \color{blue}{\frac{y}{\frac{\left(z + \frac{1692356830115869}{281474976710656}\right) \cdot z + \frac{7544303578448747}{2251799813685248}}{\left(z \cdot \frac{4992947066835229}{72057594037927936} + \frac{4429125951667411}{9007199254740992}\right) \cdot z + \frac{5029535718965825}{18014398509481984}}}}\]
    5. Taylor expanded around inf 0.4

      \[\leadsto x + \color{blue}{\left(\left(0.07512208616047560960637952121032867580652 \cdot \frac{y}{z} + 0.06929105992918889456166908757950295694172 \cdot y\right) - 0.4046220386999212492717958866705885156989 \cdot \frac{y}{{z}^{2}}\right)}\]
    6. Simplified0.4

      \[\leadsto x + \color{blue}{\left(\left(\frac{1353279196958449}{18014398509481984} \cdot \frac{y}{z} + \frac{4992947066835229}{72057594037927936} \cdot y\right) - \frac{7289022650859423}{18014398509481984} \cdot \frac{y}{{z}^{2}}\right)}\]

    if -2.5222447088418515e+20 < z < 1.611737647351516e-06

    1. Initial program 0.2

      \[x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\]
    2. Simplified0.2

      \[\leadsto \color{blue}{x + \frac{y \cdot \left(\left(z \cdot \frac{4992947066835229}{72057594037927936} + \frac{4429125951667411}{9007199254740992}\right) \cdot z + \frac{5029535718965825}{18014398509481984}\right)}{\left(z + \frac{1692356830115869}{281474976710656}\right) \cdot z + \frac{7544303578448747}{2251799813685248}}}\]
    3. Using strategy rm
    4. Applied distribute-lft-in0.2

      \[\leadsto x + \frac{\color{blue}{y \cdot \left(\left(z \cdot \frac{4992947066835229}{72057594037927936} + \frac{4429125951667411}{9007199254740992}\right) \cdot z\right) + y \cdot \frac{5029535718965825}{18014398509481984}}}{\left(z + \frac{1692356830115869}{281474976710656}\right) \cdot z + \frac{7544303578448747}{2251799813685248}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -252224470884185145344 \lor \neg \left(z \le \frac{7611215845031975}{4722366482869645213696}\right):\\ \;\;\;\;x + \left(\left(\frac{1353279196958449}{18014398509481984} \cdot \frac{y}{z} + \frac{4992947066835229}{72057594037927936} \cdot y\right) - \frac{7289022650859423}{18014398509481984} \cdot \frac{y}{{z}^{2}}\right)\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y \cdot \left(\left(z \cdot \frac{4992947066835229}{72057594037927936} + \frac{4429125951667411}{9007199254740992}\right) \cdot z\right) + y \cdot \frac{5029535718965825}{18014398509481984}}{\left(z + \frac{1692356830115869}{281474976710656}\right) \cdot z + \frac{7544303578448747}{2251799813685248}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019304 
(FPCore (x y z)
  :name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
  :precision binary64

  :herbie-target
  (if (< z -8120153.6524566747) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291888946) y) (- (/ (* 0.404622038699921249 y) (* z z)) x)) (if (< z 657611897278737680000) (+ x (* (* y (+ (* (+ (* z 0.0692910599291888946) 0.49173176105059679) z) 0.279195317918524977)) (/ 1 (+ (* (+ z 6.0124592597641033) z) 3.35034381502230394)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291888946) y) (- (/ (* 0.404622038699921249 y) (* z z)) x))))

  (+ x (/ (* y (+ (* (+ (* z 0.0692910599291888946) 0.49173176105059679) z) 0.279195317918524977)) (+ (* (+ z 6.0124592597641033) z) 3.35034381502230394))))