Average Error: 26.3 → 0.7
Time: 15.6s
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 -2.37134358210142024 \cdot 10^{57} \lor \neg \left(x \le 6.95058600294961662 \cdot 10^{46}\right):\\ \;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\ \mathbf{else}:\\ \;\;\;\;\frac{x - 2}{\left(\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001\right) \cdot \frac{1}{\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 -2.37134358210142024 \cdot 10^{57} \lor \neg \left(x \le 6.95058600294961662 \cdot 10^{46}\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\

\mathbf{else}:\\
\;\;\;\;\frac{x - 2}{\left(\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001\right) \cdot \frac{1}{\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 r431775 = x;
        double r431776 = 2.0;
        double r431777 = r431775 - r431776;
        double r431778 = 4.16438922228;
        double r431779 = r431775 * r431778;
        double r431780 = 78.6994924154;
        double r431781 = r431779 + r431780;
        double r431782 = r431781 * r431775;
        double r431783 = 137.519416416;
        double r431784 = r431782 + r431783;
        double r431785 = r431784 * r431775;
        double r431786 = y;
        double r431787 = r431785 + r431786;
        double r431788 = r431787 * r431775;
        double r431789 = z;
        double r431790 = r431788 + r431789;
        double r431791 = r431777 * r431790;
        double r431792 = 43.3400022514;
        double r431793 = r431775 + r431792;
        double r431794 = r431793 * r431775;
        double r431795 = 263.505074721;
        double r431796 = r431794 + r431795;
        double r431797 = r431796 * r431775;
        double r431798 = 313.399215894;
        double r431799 = r431797 + r431798;
        double r431800 = r431799 * r431775;
        double r431801 = 47.066876606;
        double r431802 = r431800 + r431801;
        double r431803 = r431791 / r431802;
        return r431803;
}

double f(double x, double y, double z) {
        double r431804 = x;
        double r431805 = -2.3713435821014202e+57;
        bool r431806 = r431804 <= r431805;
        double r431807 = 6.950586002949617e+46;
        bool r431808 = r431804 <= r431807;
        double r431809 = !r431808;
        bool r431810 = r431806 || r431809;
        double r431811 = y;
        double r431812 = 2.0;
        double r431813 = pow(r431804, r431812);
        double r431814 = r431811 / r431813;
        double r431815 = 4.16438922228;
        double r431816 = r431815 * r431804;
        double r431817 = r431814 + r431816;
        double r431818 = 110.1139242984811;
        double r431819 = r431817 - r431818;
        double r431820 = 2.0;
        double r431821 = r431804 - r431820;
        double r431822 = 43.3400022514;
        double r431823 = r431804 + r431822;
        double r431824 = r431823 * r431804;
        double r431825 = 263.505074721;
        double r431826 = r431824 + r431825;
        double r431827 = r431826 * r431804;
        double r431828 = 313.399215894;
        double r431829 = r431827 + r431828;
        double r431830 = r431829 * r431804;
        double r431831 = 47.066876606;
        double r431832 = r431830 + r431831;
        double r431833 = 1.0;
        double r431834 = r431804 * r431815;
        double r431835 = 78.6994924154;
        double r431836 = r431834 + r431835;
        double r431837 = r431836 * r431804;
        double r431838 = 137.519416416;
        double r431839 = r431837 + r431838;
        double r431840 = r431839 * r431804;
        double r431841 = r431840 + r431811;
        double r431842 = r431841 * r431804;
        double r431843 = z;
        double r431844 = r431842 + r431843;
        double r431845 = r431833 / r431844;
        double r431846 = r431832 * r431845;
        double r431847 = r431821 / r431846;
        double r431848 = r431810 ? r431819 : r431847;
        return r431848;
}

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.3
Target0.4
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 < -2.3713435821014202e+57 or 6.950586002949617e+46 < x

    1. Initial program 62.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.5

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

    if -2.3713435821014202e+57 < x < 6.950586002949617e+46

    1. Initial program 1.1

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

      \[\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}}}\]
    4. Using strategy rm
    5. Applied div-inv0.7

      \[\leadsto \frac{x - 2}{\color{blue}{\left(\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001\right) \cdot \frac{1}{\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 -2.37134358210142024 \cdot 10^{57} \lor \neg \left(x \le 6.95058600294961662 \cdot 10^{46}\right):\\ \;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\ \mathbf{else}:\\ \;\;\;\;\frac{x - 2}{\left(\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001\right) \cdot \frac{1}{\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 2020042 
(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)))