Average Error: 25.7 → 0.7
Time: 24.0s
Precision: 64
\[\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}\]
\[\begin{array}{l} \mathbf{if}\;x \le -8.08485983205999589 \cdot 10^{65} \lor \neg \left(x \le 5.2673144129858201 \cdot 10^{60}\right):\\ \;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\ \mathbf{else}:\\ \;\;\;\;\frac{x - 2}{\frac{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}{\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z}}\\ \end{array}\]
\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}
\begin{array}{l}
\mathbf{if}\;x \le -8.08485983205999589 \cdot 10^{65} \lor \neg \left(x \le 5.2673144129858201 \cdot 10^{60}\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\

\mathbf{else}:\\
\;\;\;\;\frac{x - 2}{\frac{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}{\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z}}\\

\end{array}
double f(double x, double y, double z) {
        double r562677 = x;
        double r562678 = 2.0;
        double r562679 = r562677 - r562678;
        double r562680 = 4.16438922228;
        double r562681 = r562677 * r562680;
        double r562682 = 78.6994924154;
        double r562683 = r562681 + r562682;
        double r562684 = r562683 * r562677;
        double r562685 = 137.519416416;
        double r562686 = r562684 + r562685;
        double r562687 = r562686 * r562677;
        double r562688 = y;
        double r562689 = r562687 + r562688;
        double r562690 = r562689 * r562677;
        double r562691 = z;
        double r562692 = r562690 + r562691;
        double r562693 = r562679 * r562692;
        double r562694 = 43.3400022514;
        double r562695 = r562677 + r562694;
        double r562696 = r562695 * r562677;
        double r562697 = 263.505074721;
        double r562698 = r562696 + r562697;
        double r562699 = r562698 * r562677;
        double r562700 = 313.399215894;
        double r562701 = r562699 + r562700;
        double r562702 = r562701 * r562677;
        double r562703 = 47.066876606;
        double r562704 = r562702 + r562703;
        double r562705 = r562693 / r562704;
        return r562705;
}

double f(double x, double y, double z) {
        double r562706 = x;
        double r562707 = -8.084859832059996e+65;
        bool r562708 = r562706 <= r562707;
        double r562709 = 5.26731441298582e+60;
        bool r562710 = r562706 <= r562709;
        double r562711 = !r562710;
        bool r562712 = r562708 || r562711;
        double r562713 = y;
        double r562714 = 2.0;
        double r562715 = pow(r562706, r562714);
        double r562716 = r562713 / r562715;
        double r562717 = 4.16438922228;
        double r562718 = r562717 * r562706;
        double r562719 = r562716 + r562718;
        double r562720 = 110.1139242984811;
        double r562721 = r562719 - r562720;
        double r562722 = 2.0;
        double r562723 = r562706 - r562722;
        double r562724 = 43.3400022514;
        double r562725 = r562706 + r562724;
        double r562726 = r562725 * r562706;
        double r562727 = 263.505074721;
        double r562728 = r562726 + r562727;
        double r562729 = r562728 * r562706;
        double r562730 = 313.399215894;
        double r562731 = r562729 + r562730;
        double r562732 = r562731 * r562706;
        double r562733 = 47.066876606;
        double r562734 = r562732 + r562733;
        double r562735 = r562706 * r562717;
        double r562736 = 78.6994924154;
        double r562737 = r562735 + r562736;
        double r562738 = r562737 * r562706;
        double r562739 = 137.519416416;
        double r562740 = r562738 + r562739;
        double r562741 = r562740 * r562706;
        double r562742 = r562741 + r562713;
        double r562743 = r562742 * r562706;
        double r562744 = z;
        double r562745 = r562743 + r562744;
        double r562746 = r562734 / r562745;
        double r562747 = r562723 / r562746;
        double r562748 = r562712 ? r562721 : r562747;
        return r562748;
}

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

Original25.7
Target0.6
Herbie0.7
\[\begin{array}{l} \mathbf{if}\;x \lt -3.3261287258700048 \cdot 10^{62}:\\ \;\;\;\;\left(\frac{y}{x \cdot x} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\ \mathbf{elif}\;x \lt 9.4299917145546727 \cdot 10^{55}:\\ \;\;\;\;\frac{x - 2}{1} \cdot \frac{\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z}{\left(\left(263.50507472100003 \cdot x + \left(43.3400022514000014 \cdot \left(x \cdot x\right) + x \cdot \left(x \cdot x\right)\right)\right) + 313.399215894\right) \cdot x + 47.066876606000001}\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{y}{x \cdot x} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if x < -8.084859832059996e+65 or 5.26731441298582e+60 < x

    1. Initial program 64.0

      \[\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}\]
    2. Taylor expanded around inf 0.2

      \[\leadsto \color{blue}{\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109}\]

    if -8.084859832059996e+65 < x < 5.26731441298582e+60

    1. Initial program 2.0

      \[\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}\]
    2. Using strategy rm
    3. Applied associate-/l*0.9

      \[\leadsto \color{blue}{\frac{x - 2}{\frac{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}{\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\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 -8.08485983205999589 \cdot 10^{65} \lor \neg \left(x \le 5.2673144129858201 \cdot 10^{60}\right):\\ \;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\ \mathbf{else}:\\ \;\;\;\;\frac{x - 2}{\frac{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}{\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z}}\\ \end{array}\]

Reproduce

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

  :herbie-target
  (if (< x -3.326128725870005e+62) (- (+ (/ y (* x x)) (* 4.16438922228 x)) 110.1139242984811) (if (< x 9.429991714554673e+55) (* (/ (- x 2) 1) (/ (+ (* (+ (* (+ (* (+ (* x 4.16438922228) 78.6994924154) x) 137.519416416) x) y) x) z) (+ (* (+ (+ (* 263.505074721 x) (+ (* 43.3400022514 (* x x)) (* x (* x x)))) 313.399215894) x) 47.066876606))) (- (+ (/ y (* x x)) (* 4.16438922228 x)) 110.1139242984811)))

  (/ (* (- x 2) (+ (* (+ (* (+ (* (+ (* x 4.16438922228) 78.6994924154) x) 137.519416416) x) y) x) z)) (+ (* (+ (* (+ (* (+ x 43.3400022514) x) 263.505074721) x) 313.399215894) x) 47.066876606)))