Average Error: 3.1 → 1.6
Time: 3.2s
Precision: 64
\[x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\]
\[\begin{array}{l} \mathbf{if}\;x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y} \le 6.632641937836763386980494639675229027406 \cdot 10^{145}:\\ \;\;\;\;x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\\ \mathbf{else}:\\ \;\;\;\;x - \frac{1}{x}\\ \end{array}\]
x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}
\begin{array}{l}
\mathbf{if}\;x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y} \le 6.632641937836763386980494639675229027406 \cdot 10^{145}:\\
\;\;\;\;x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\\

\mathbf{else}:\\
\;\;\;\;x - \frac{1}{x}\\

\end{array}
double f(double x, double y, double z) {
        double r451760 = x;
        double r451761 = y;
        double r451762 = 1.1283791670955126;
        double r451763 = z;
        double r451764 = exp(r451763);
        double r451765 = r451762 * r451764;
        double r451766 = r451760 * r451761;
        double r451767 = r451765 - r451766;
        double r451768 = r451761 / r451767;
        double r451769 = r451760 + r451768;
        return r451769;
}

double f(double x, double y, double z) {
        double r451770 = x;
        double r451771 = y;
        double r451772 = 1.1283791670955126;
        double r451773 = z;
        double r451774 = exp(r451773);
        double r451775 = r451772 * r451774;
        double r451776 = r451770 * r451771;
        double r451777 = r451775 - r451776;
        double r451778 = r451771 / r451777;
        double r451779 = r451770 + r451778;
        double r451780 = 6.632641937836763e+145;
        bool r451781 = r451779 <= r451780;
        double r451782 = 1.0;
        double r451783 = r451782 / r451770;
        double r451784 = r451770 - r451783;
        double r451785 = r451781 ? r451779 : r451784;
        return r451785;
}

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

Original3.1
Target0.0
Herbie1.6
\[x + \frac{1}{\frac{1.128379167095512558560699289955664426088}{y} \cdot e^{z} - x}\]

Derivation

  1. Split input into 2 regimes
  2. if (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))) < 6.632641937836763e+145

    1. Initial program 1.3

      \[x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\]

    if 6.632641937836763e+145 < (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y))))

    1. Initial program 10.6

      \[x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\]
    2. Taylor expanded around inf 3.1

      \[\leadsto \color{blue}{x - \frac{1}{x}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y} \le 6.632641937836763386980494639675229027406 \cdot 10^{145}:\\ \;\;\;\;x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\\ \mathbf{else}:\\ \;\;\;\;x - \frac{1}{x}\\ \end{array}\]

Reproduce

herbie shell --seed 2019362 
(FPCore (x y z)
  :name "Numeric.SpecFunctions:invErfc from math-functions-0.1.5.2, A"
  :precision binary64

  :herbie-target
  (+ x (/ 1 (- (* (/ 1.1283791670955126 y) (exp z)) x)))

  (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))))