Average Error: 2.6 → 1.9
Time: 4.5s
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 1.8133598671607465 \cdot 10^{283}:\\ \;\;\;\;x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y}{1.12837916709551256 \cdot z + \left(0.564189583547756279 \cdot {z}^{2} + 1.12837916709551256\right)}\\ \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 1.8133598671607465 \cdot 10^{283}:\\
\;\;\;\;x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}\\

\mathbf{else}:\\
\;\;\;\;x + \frac{y}{1.12837916709551256 \cdot z + \left(0.564189583547756279 \cdot {z}^{2} + 1.12837916709551256\right)}\\

\end{array}
double f(double x, double y, double z) {
        double r570232 = x;
        double r570233 = y;
        double r570234 = 1.1283791670955126;
        double r570235 = z;
        double r570236 = exp(r570235);
        double r570237 = r570234 * r570236;
        double r570238 = r570232 * r570233;
        double r570239 = r570237 - r570238;
        double r570240 = r570233 / r570239;
        double r570241 = r570232 + r570240;
        return r570241;
}

double f(double x, double y, double z) {
        double r570242 = x;
        double r570243 = y;
        double r570244 = 1.1283791670955126;
        double r570245 = z;
        double r570246 = exp(r570245);
        double r570247 = r570244 * r570246;
        double r570248 = r570242 * r570243;
        double r570249 = r570247 - r570248;
        double r570250 = r570243 / r570249;
        double r570251 = r570242 + r570250;
        double r570252 = 1.8133598671607465e+283;
        bool r570253 = r570251 <= r570252;
        double r570254 = r570244 * r570245;
        double r570255 = 0.5641895835477563;
        double r570256 = 2.0;
        double r570257 = pow(r570245, r570256);
        double r570258 = r570255 * r570257;
        double r570259 = r570258 + r570244;
        double r570260 = r570254 + r570259;
        double r570261 = r570243 / r570260;
        double r570262 = r570242 + r570261;
        double r570263 = r570253 ? r570251 : r570262;
        return r570263;
}

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

Original2.6
Target0.0
Herbie1.9
\[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)))) < 1.8133598671607465e+283

    1. Initial program 0.9

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

    if 1.8133598671607465e+283 < (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y))))

    1. Initial program 35.9

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

      \[\leadsto x + \frac{y}{\color{blue}{1.12837916709551256 \cdot z + \left(0.564189583547756279 \cdot {z}^{2} + 1.12837916709551256\right)}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y} \le 1.8133598671607465 \cdot 10^{283}:\\ \;\;\;\;x + \frac{y}{1.12837916709551256 \cdot e^{z} - x \cdot y}\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y}{1.12837916709551256 \cdot z + \left(0.564189583547756279 \cdot {z}^{2} + 1.12837916709551256\right)}\\ \end{array}\]

Reproduce

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