Average Error: 20.0 → 4.9
Time: 1.1s
Precision: 64
\[0.0 \lt x \lt 1 \land y \lt 1\]
\[\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\]
\[\begin{array}{l} \mathbf{if}\;y \le -1.079104504515916207364727556800059479604 \cdot 10^{151}:\\ \;\;\;\;-1\\ \mathbf{elif}\;y \le -1.598884525268849108162615736705747401186 \cdot 10^{-162}:\\ \;\;\;\;\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\\ \mathbf{elif}\;y \le 2.951933593958605684597057375955107942601 \cdot 10^{-175}:\\ \;\;\;\;1\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\\ \end{array}\]
\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}
\begin{array}{l}
\mathbf{if}\;y \le -1.079104504515916207364727556800059479604 \cdot 10^{151}:\\
\;\;\;\;-1\\

\mathbf{elif}\;y \le -1.598884525268849108162615736705747401186 \cdot 10^{-162}:\\
\;\;\;\;\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\\

\mathbf{elif}\;y \le 2.951933593958605684597057375955107942601 \cdot 10^{-175}:\\
\;\;\;\;1\\

\mathbf{else}:\\
\;\;\;\;\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\\

\end{array}
double f(double x, double y) {
        double r92785 = x;
        double r92786 = y;
        double r92787 = r92785 - r92786;
        double r92788 = r92785 + r92786;
        double r92789 = r92787 * r92788;
        double r92790 = r92785 * r92785;
        double r92791 = r92786 * r92786;
        double r92792 = r92790 + r92791;
        double r92793 = r92789 / r92792;
        return r92793;
}

double f(double x, double y) {
        double r92794 = y;
        double r92795 = -1.0791045045159162e+151;
        bool r92796 = r92794 <= r92795;
        double r92797 = -1.0;
        double r92798 = -1.598884525268849e-162;
        bool r92799 = r92794 <= r92798;
        double r92800 = x;
        double r92801 = r92800 - r92794;
        double r92802 = r92800 + r92794;
        double r92803 = r92801 * r92802;
        double r92804 = r92800 * r92800;
        double r92805 = r92794 * r92794;
        double r92806 = r92804 + r92805;
        double r92807 = r92803 / r92806;
        double r92808 = 2.9519335939586057e-175;
        bool r92809 = r92794 <= r92808;
        double r92810 = 1.0;
        double r92811 = r92809 ? r92810 : r92807;
        double r92812 = r92799 ? r92807 : r92811;
        double r92813 = r92796 ? r92797 : r92812;
        return r92813;
}

Error

Bits error versus x

Bits error versus y

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original20.0
Target0.1
Herbie4.9
\[\begin{array}{l} \mathbf{if}\;0.5 \lt \left|\frac{x}{y}\right| \lt 2:\\ \;\;\;\;\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\\ \mathbf{else}:\\ \;\;\;\;1 - \frac{2}{1 + \frac{x}{y} \cdot \frac{x}{y}}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if y < -1.0791045045159162e+151

    1. Initial program 63.0

      \[\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\]
    2. Taylor expanded around 0 0

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

    if -1.0791045045159162e+151 < y < -1.598884525268849e-162 or 2.9519335939586057e-175 < y

    1. Initial program 0.8

      \[\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\]

    if -1.598884525268849e-162 < y < 2.9519335939586057e-175

    1. Initial program 29.7

      \[\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\]
    2. Taylor expanded around inf 14.4

      \[\leadsto \color{blue}{1}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification4.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -1.079104504515916207364727556800059479604 \cdot 10^{151}:\\ \;\;\;\;-1\\ \mathbf{elif}\;y \le -1.598884525268849108162615736705747401186 \cdot 10^{-162}:\\ \;\;\;\;\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\\ \mathbf{elif}\;y \le 2.951933593958605684597057375955107942601 \cdot 10^{-175}:\\ \;\;\;\;1\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\\ \end{array}\]

Reproduce

herbie shell --seed 2019362 
(FPCore (x y)
  :name "Kahan p9 Example"
  :precision binary64
  :pre (and (< 0.0 x 1) (< y 1))

  :herbie-target
  (if (< 0.5 (fabs (/ x y)) 2) (/ (* (- x y) (+ x y)) (+ (* x x) (* y y))) (- 1 (/ 2 (+ 1 (* (/ x y) (/ x y))))))

  (/ (* (- x y) (+ x y)) (+ (* x x) (* y y))))