Average Error: 12.9 → 2.5
Time: 34.2s
Precision: 64
\[\frac{x \cdot \left(y - z\right)}{y}\]
\[\begin{array}{l} \mathbf{if}\;x \le 1.381744056952589752995827372431343793996 \cdot 10^{-289}:\\ \;\;\;\;\frac{x}{\frac{y}{y - z}}\\ \mathbf{elif}\;x \le 2.431917908343134964581040143463595205176 \cdot 10^{-105}:\\ \;\;\;\;x - \frac{z \cdot x}{y}\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{\frac{y}{y - z}}\\ \end{array}\]
\frac{x \cdot \left(y - z\right)}{y}
\begin{array}{l}
\mathbf{if}\;x \le 1.381744056952589752995827372431343793996 \cdot 10^{-289}:\\
\;\;\;\;\frac{x}{\frac{y}{y - z}}\\

\mathbf{elif}\;x \le 2.431917908343134964581040143463595205176 \cdot 10^{-105}:\\
\;\;\;\;x - \frac{z \cdot x}{y}\\

\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{y}{y - z}}\\

\end{array}
double f(double x, double y, double z) {
        double r37504751 = x;
        double r37504752 = y;
        double r37504753 = z;
        double r37504754 = r37504752 - r37504753;
        double r37504755 = r37504751 * r37504754;
        double r37504756 = r37504755 / r37504752;
        return r37504756;
}

double f(double x, double y, double z) {
        double r37504757 = x;
        double r37504758 = 1.3817440569525898e-289;
        bool r37504759 = r37504757 <= r37504758;
        double r37504760 = y;
        double r37504761 = z;
        double r37504762 = r37504760 - r37504761;
        double r37504763 = r37504760 / r37504762;
        double r37504764 = r37504757 / r37504763;
        double r37504765 = 2.431917908343135e-105;
        bool r37504766 = r37504757 <= r37504765;
        double r37504767 = r37504761 * r37504757;
        double r37504768 = r37504767 / r37504760;
        double r37504769 = r37504757 - r37504768;
        double r37504770 = r37504766 ? r37504769 : r37504764;
        double r37504771 = r37504759 ? r37504764 : r37504770;
        return r37504771;
}

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

Original12.9
Target2.9
Herbie2.5
\[\begin{array}{l} \mathbf{if}\;z \lt -2.060202331921739024383612783691266533098 \cdot 10^{104}:\\ \;\;\;\;x - \frac{z \cdot x}{y}\\ \mathbf{elif}\;z \lt 1.693976601382852594702773997610248441465 \cdot 10^{213}:\\ \;\;\;\;\frac{x}{\frac{y}{y - z}}\\ \mathbf{else}:\\ \;\;\;\;\left(y - z\right) \cdot \frac{x}{y}\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if x < 1.3817440569525898e-289 or 2.431917908343135e-105 < x

    1. Initial program 14.3

      \[\frac{x \cdot \left(y - z\right)}{y}\]
    2. Using strategy rm
    3. Applied associate-/l*2.3

      \[\leadsto \color{blue}{\frac{x}{\frac{y}{y - z}}}\]

    if 1.3817440569525898e-289 < x < 2.431917908343135e-105

    1. Initial program 6.3

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

      \[\leadsto \color{blue}{x - \frac{x \cdot z}{y}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification2.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 1.381744056952589752995827372431343793996 \cdot 10^{-289}:\\ \;\;\;\;\frac{x}{\frac{y}{y - z}}\\ \mathbf{elif}\;x \le 2.431917908343134964581040143463595205176 \cdot 10^{-105}:\\ \;\;\;\;x - \frac{z \cdot x}{y}\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{\frac{y}{y - z}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019168 
(FPCore (x y z)
  :name "Diagrams.Backend.Cairo.Internal:setTexture from diagrams-cairo-1.3.0.3"

  :herbie-target
  (if (< z -2.060202331921739e+104) (- x (/ (* z x) y)) (if (< z 1.6939766013828526e+213) (/ x (/ y (- y z))) (* (- y z) (/ x y))))

  (/ (* x (- y z)) y))