Average Error: 3.0 → 0.3
Time: 2.7s
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 -2.38038529208034741010033526046896232449 \cdot 10^{232} \lor \neg \left(x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y} \le 6.146831817986485928975089715892198335691 \cdot 10^{254}\right):\\ \;\;\;\;x - \frac{1}{x}\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\\ \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 -2.38038529208034741010033526046896232449 \cdot 10^{232} \lor \neg \left(x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y} \le 6.146831817986485928975089715892198335691 \cdot 10^{254}\right):\\
\;\;\;\;x - \frac{1}{x}\\

\mathbf{else}:\\
\;\;\;\;x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\\

\end{array}
double f(double x, double y, double z) {
        double r439581 = x;
        double r439582 = y;
        double r439583 = 1.1283791670955126;
        double r439584 = z;
        double r439585 = exp(r439584);
        double r439586 = r439583 * r439585;
        double r439587 = r439581 * r439582;
        double r439588 = r439586 - r439587;
        double r439589 = r439582 / r439588;
        double r439590 = r439581 + r439589;
        return r439590;
}

double f(double x, double y, double z) {
        double r439591 = x;
        double r439592 = y;
        double r439593 = 1.1283791670955126;
        double r439594 = z;
        double r439595 = exp(r439594);
        double r439596 = r439593 * r439595;
        double r439597 = r439591 * r439592;
        double r439598 = r439596 - r439597;
        double r439599 = r439592 / r439598;
        double r439600 = r439591 + r439599;
        double r439601 = -2.3803852920803474e+232;
        bool r439602 = r439600 <= r439601;
        double r439603 = 6.146831817986486e+254;
        bool r439604 = r439600 <= r439603;
        double r439605 = !r439604;
        bool r439606 = r439602 || r439605;
        double r439607 = 1.0;
        double r439608 = r439607 / r439591;
        double r439609 = r439591 - r439608;
        double r439610 = r439606 ? r439609 : r439600;
        return r439610;
}

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
Herbie0.3
\[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)))) < -2.3803852920803474e+232 or 6.146831817986486e+254 < (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y))))

    1. Initial program 18.0

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

      \[\leadsto \color{blue}{x - \frac{1}{x}}\]

    if -2.3803852920803474e+232 < (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))) < 6.146831817986486e+254

    1. Initial program 0.1

      \[x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y} \le -2.38038529208034741010033526046896232449 \cdot 10^{232} \lor \neg \left(x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y} \le 6.146831817986485928975089715892198335691 \cdot 10^{254}\right):\\ \;\;\;\;x - \frac{1}{x}\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y}{1.128379167095512558560699289955664426088 \cdot e^{z} - x \cdot y}\\ \end{array}\]

Reproduce

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