Average Error: 26.9 → 0.8
Time: 9.3s
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.54463890534666934 \cdot 10^{39} \lor \neg \left(x \le 2.8097973154484201 \cdot 10^{55}\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 -2.54463890534666934 \cdot 10^{39} \lor \neg \left(x \le 2.8097973154484201 \cdot 10^{55}\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 r430027 = x;
        double r430028 = 2.0;
        double r430029 = r430027 - r430028;
        double r430030 = 4.16438922228;
        double r430031 = r430027 * r430030;
        double r430032 = 78.6994924154;
        double r430033 = r430031 + r430032;
        double r430034 = r430033 * r430027;
        double r430035 = 137.519416416;
        double r430036 = r430034 + r430035;
        double r430037 = r430036 * r430027;
        double r430038 = y;
        double r430039 = r430037 + r430038;
        double r430040 = r430039 * r430027;
        double r430041 = z;
        double r430042 = r430040 + r430041;
        double r430043 = r430029 * r430042;
        double r430044 = 43.3400022514;
        double r430045 = r430027 + r430044;
        double r430046 = r430045 * r430027;
        double r430047 = 263.505074721;
        double r430048 = r430046 + r430047;
        double r430049 = r430048 * r430027;
        double r430050 = 313.399215894;
        double r430051 = r430049 + r430050;
        double r430052 = r430051 * r430027;
        double r430053 = 47.066876606;
        double r430054 = r430052 + r430053;
        double r430055 = r430043 / r430054;
        return r430055;
}

double f(double x, double y, double z) {
        double r430056 = x;
        double r430057 = -2.5446389053466693e+39;
        bool r430058 = r430056 <= r430057;
        double r430059 = 2.80979731544842e+55;
        bool r430060 = r430056 <= r430059;
        double r430061 = !r430060;
        bool r430062 = r430058 || r430061;
        double r430063 = y;
        double r430064 = 2.0;
        double r430065 = pow(r430056, r430064);
        double r430066 = r430063 / r430065;
        double r430067 = 4.16438922228;
        double r430068 = r430067 * r430056;
        double r430069 = r430066 + r430068;
        double r430070 = 110.1139242984811;
        double r430071 = r430069 - r430070;
        double r430072 = 2.0;
        double r430073 = r430056 - r430072;
        double r430074 = 43.3400022514;
        double r430075 = r430056 + r430074;
        double r430076 = r430075 * r430056;
        double r430077 = 263.505074721;
        double r430078 = r430076 + r430077;
        double r430079 = r430078 * r430056;
        double r430080 = 313.399215894;
        double r430081 = r430079 + r430080;
        double r430082 = r430081 * r430056;
        double r430083 = 47.066876606;
        double r430084 = r430082 + r430083;
        double r430085 = r430056 * r430067;
        double r430086 = 78.6994924154;
        double r430087 = r430085 + r430086;
        double r430088 = r430087 * r430056;
        double r430089 = 137.519416416;
        double r430090 = r430088 + r430089;
        double r430091 = r430090 * r430056;
        double r430092 = r430091 + r430063;
        double r430093 = r430092 * r430056;
        double r430094 = z;
        double r430095 = r430093 + r430094;
        double r430096 = r430084 / r430095;
        double r430097 = r430073 / r430096;
        double r430098 = r430062 ? r430071 : r430097;
        return r430098;
}

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.9
Target0.5
Herbie0.8
\[\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.5446389053466693e+39 or 2.80979731544842e+55 < x

    1. Initial program 61.6

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

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

    if -2.5446389053466693e+39 < x < 2.80979731544842e+55

    1. Initial program 1.2

      \[\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}}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -2.54463890534666934 \cdot 10^{39} \lor \neg \left(x \le 2.8097973154484201 \cdot 10^{55}\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 2020021 
(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)))