Average Error: 3.0 → 1.6
Time: 2.2s
Precision: 64
\[x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}\]
\[\begin{array}{l} \mathbf{if}\;x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y} \le 9.9084596448657439 \cdot 10^{147}:\\ \;\;\;\;x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}\\ \mathbf{else}:\\ \;\;\;\;x - \frac{1}{x}\\ \end{array}\]
x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}
\begin{array}{l}
\mathbf{if}\;x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y} \le 9.9084596448657439 \cdot 10^{147}:\\
\;\;\;\;x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}\\

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

\end{array}
double f(double x, double y, double z) {
        double r445490 = x;
        double r445491 = y;
        double r445492 = 1.1283791670955126;
        double r445493 = z;
        double r445494 = exp(r445493);
        double r445495 = r445492 * r445494;
        double r445496 = r445490 * r445491;
        double r445497 = r445495 - r445496;
        double r445498 = r445491 / r445497;
        double r445499 = r445490 + r445498;
        return r445499;
}

double f(double x, double y, double z) {
        double r445500 = x;
        double r445501 = y;
        double r445502 = 1.1283791670955126;
        double r445503 = z;
        double r445504 = exp(r445503);
        double r445505 = r445502 * r445504;
        double r445506 = r445500 * r445501;
        double r445507 = r445505 - r445506;
        double r445508 = r445501 / r445507;
        double r445509 = r445500 + r445508;
        double r445510 = 9.908459644865744e+147;
        bool r445511 = r445509 <= r445510;
        double r445512 = 1.0;
        double r445513 = r445512 / r445500;
        double r445514 = r445500 - r445513;
        double r445515 = r445511 ? r445509 : r445514;
        return r445515;
}

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.0
Target0.0
Herbie1.6
\[x + \frac{1}{\frac{1.12837916709551256}{y} \cdot e^{z} - x}\]

Derivation

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

    1. Initial program 1.3

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

    if 9.908459644865744e+147 < (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y))))

    1. Initial program 10.4

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

      \[\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.12837916709551256 \cdot e^{z} - x \cdot y} \le 9.9084596448657439 \cdot 10^{147}:\\ \;\;\;\;x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}\\ \mathbf{else}:\\ \;\;\;\;x - \frac{1}{x}\\ \end{array}\]

Reproduce

herbie shell --seed 2020024 
(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)))))