Average Error: 12.4 → 3.6
Time: 10.1s
Precision: 64
\[\frac{x \cdot \left(y - z\right)}{y}\]
\[\begin{array}{l} \mathbf{if}\;x \le -9.43485019037392297 \cdot 10^{-51} \lor \neg \left(x \le -1.276743401231038 \cdot 10^{-140}\right):\\ \;\;\;\;\frac{x}{\frac{-y}{-\left(y - z\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{-y} \cdot \left(-\left(y - z\right)\right)\\ \end{array}\]
\frac{x \cdot \left(y - z\right)}{y}
\begin{array}{l}
\mathbf{if}\;x \le -9.43485019037392297 \cdot 10^{-51} \lor \neg \left(x \le -1.276743401231038 \cdot 10^{-140}\right):\\
\;\;\;\;\frac{x}{\frac{-y}{-\left(y - z\right)}}\\

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

\end{array}
double f(double x, double y, double z) {
        double r801010 = x;
        double r801011 = y;
        double r801012 = z;
        double r801013 = r801011 - r801012;
        double r801014 = r801010 * r801013;
        double r801015 = r801014 / r801011;
        return r801015;
}

double f(double x, double y, double z) {
        double r801016 = x;
        double r801017 = -9.434850190373923e-51;
        bool r801018 = r801016 <= r801017;
        double r801019 = -1.276743401231038e-140;
        bool r801020 = r801016 <= r801019;
        double r801021 = !r801020;
        bool r801022 = r801018 || r801021;
        double r801023 = y;
        double r801024 = -r801023;
        double r801025 = z;
        double r801026 = r801023 - r801025;
        double r801027 = -r801026;
        double r801028 = r801024 / r801027;
        double r801029 = r801016 / r801028;
        double r801030 = r801016 / r801024;
        double r801031 = r801030 * r801027;
        double r801032 = r801022 ? r801029 : r801031;
        return r801032;
}

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.4
Target3.0
Herbie3.6
\[\begin{array}{l} \mathbf{if}\;z \lt -2.060202331921739 \cdot 10^{104}:\\ \;\;\;\;x - \frac{z \cdot x}{y}\\ \mathbf{elif}\;z \lt 1.69397660138285259 \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 < -9.434850190373923e-51 or -1.276743401231038e-140 < x

    1. Initial program 13.3

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

      \[\leadsto \color{blue}{\frac{x}{\frac{y}{y - z}}}\]
    4. Using strategy rm
    5. Applied frac-2neg3.0

      \[\leadsto \frac{x}{\color{blue}{\frac{-y}{-\left(y - z\right)}}}\]

    if -9.434850190373923e-51 < x < -1.276743401231038e-140

    1. Initial program 2.1

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

      \[\leadsto \color{blue}{\frac{x}{\frac{y}{y - z}}}\]
    4. Using strategy rm
    5. Applied frac-2neg5.1

      \[\leadsto \frac{x}{\color{blue}{\frac{-y}{-\left(y - z\right)}}}\]
    6. Using strategy rm
    7. Applied associate-/r/10.0

      \[\leadsto \color{blue}{\frac{x}{-y} \cdot \left(-\left(y - z\right)\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification3.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -9.43485019037392297 \cdot 10^{-51} \lor \neg \left(x \le -1.276743401231038 \cdot 10^{-140}\right):\\ \;\;\;\;\frac{x}{\frac{-y}{-\left(y - z\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{-y} \cdot \left(-\left(y - z\right)\right)\\ \end{array}\]

Reproduce

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

  :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))