Average Error: 1.4 → 0.1
Time: 9.3s
Precision: 64
\[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
\[\begin{array}{l} \mathbf{if}\;x \le -5.323311533620367095344248379509361504445 \cdot 10^{50}:\\ \;\;\;\;\left|\frac{x + 4}{y} - \frac{x}{\frac{y}{z}}\right|\\ \mathbf{elif}\;x \le 4.452832877986661053171246749116107821465:\\ \;\;\;\;\left|\frac{\left(x + 4\right) - x \cdot z}{y}\right|\\ \mathbf{else}:\\ \;\;\;\;\left|\frac{x + 4}{y} - x \cdot \frac{z}{y}\right|\\ \end{array}\]
\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|
\begin{array}{l}
\mathbf{if}\;x \le -5.323311533620367095344248379509361504445 \cdot 10^{50}:\\
\;\;\;\;\left|\frac{x + 4}{y} - \frac{x}{\frac{y}{z}}\right|\\

\mathbf{elif}\;x \le 4.452832877986661053171246749116107821465:\\
\;\;\;\;\left|\frac{\left(x + 4\right) - x \cdot z}{y}\right|\\

\mathbf{else}:\\
\;\;\;\;\left|\frac{x + 4}{y} - x \cdot \frac{z}{y}\right|\\

\end{array}
double f(double x, double y, double z) {
        double r23424 = x;
        double r23425 = 4.0;
        double r23426 = r23424 + r23425;
        double r23427 = y;
        double r23428 = r23426 / r23427;
        double r23429 = r23424 / r23427;
        double r23430 = z;
        double r23431 = r23429 * r23430;
        double r23432 = r23428 - r23431;
        double r23433 = fabs(r23432);
        return r23433;
}

double f(double x, double y, double z) {
        double r23434 = x;
        double r23435 = -5.323311533620367e+50;
        bool r23436 = r23434 <= r23435;
        double r23437 = 4.0;
        double r23438 = r23434 + r23437;
        double r23439 = y;
        double r23440 = r23438 / r23439;
        double r23441 = z;
        double r23442 = r23439 / r23441;
        double r23443 = r23434 / r23442;
        double r23444 = r23440 - r23443;
        double r23445 = fabs(r23444);
        double r23446 = 4.452832877986661;
        bool r23447 = r23434 <= r23446;
        double r23448 = r23434 * r23441;
        double r23449 = r23438 - r23448;
        double r23450 = r23449 / r23439;
        double r23451 = fabs(r23450);
        double r23452 = r23441 / r23439;
        double r23453 = r23434 * r23452;
        double r23454 = r23440 - r23453;
        double r23455 = fabs(r23454);
        double r23456 = r23447 ? r23451 : r23455;
        double r23457 = r23436 ? r23445 : r23456;
        return r23457;
}

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

Derivation

  1. Split input into 3 regimes
  2. if x < -5.323311533620367e+50

    1. Initial program 0.1

      \[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
    2. Using strategy rm
    3. Applied *-un-lft-identity0.1

      \[\leadsto \left|\frac{x + 4}{y} - \frac{x}{\color{blue}{1 \cdot y}} \cdot z\right|\]
    4. Applied *-un-lft-identity0.1

      \[\leadsto \left|\frac{x + 4}{y} - \frac{\color{blue}{1 \cdot x}}{1 \cdot y} \cdot z\right|\]
    5. Applied times-frac0.1

      \[\leadsto \left|\frac{x + 4}{y} - \color{blue}{\left(\frac{1}{1} \cdot \frac{x}{y}\right)} \cdot z\right|\]
    6. Applied associate-*l*0.1

      \[\leadsto \left|\frac{x + 4}{y} - \color{blue}{\frac{1}{1} \cdot \left(\frac{x}{y} \cdot z\right)}\right|\]
    7. Simplified0.1

      \[\leadsto \left|\frac{x + 4}{y} - \frac{1}{1} \cdot \color{blue}{\frac{x}{\frac{y}{z}}}\right|\]

    if -5.323311533620367e+50 < x < 4.452832877986661

    1. Initial program 2.2

      \[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
    2. Using strategy rm
    3. Applied associate-*l/0.1

      \[\leadsto \left|\frac{x + 4}{y} - \color{blue}{\frac{x \cdot z}{y}}\right|\]
    4. Applied sub-div0.1

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

    if 4.452832877986661 < x

    1. Initial program 0.1

      \[\left|\frac{x + 4}{y} - \frac{x}{y} \cdot z\right|\]
    2. Using strategy rm
    3. Applied div-inv0.2

      \[\leadsto \left|\frac{x + 4}{y} - \color{blue}{\left(x \cdot \frac{1}{y}\right)} \cdot z\right|\]
    4. Applied associate-*l*0.2

      \[\leadsto \left|\frac{x + 4}{y} - \color{blue}{x \cdot \left(\frac{1}{y} \cdot z\right)}\right|\]
    5. Simplified0.1

      \[\leadsto \left|\frac{x + 4}{y} - x \cdot \color{blue}{\frac{z}{y}}\right|\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -5.323311533620367095344248379509361504445 \cdot 10^{50}:\\ \;\;\;\;\left|\frac{x + 4}{y} - \frac{x}{\frac{y}{z}}\right|\\ \mathbf{elif}\;x \le 4.452832877986661053171246749116107821465:\\ \;\;\;\;\left|\frac{\left(x + 4\right) - x \cdot z}{y}\right|\\ \mathbf{else}:\\ \;\;\;\;\left|\frac{x + 4}{y} - x \cdot \frac{z}{y}\right|\\ \end{array}\]

Reproduce

herbie shell --seed 2019212 
(FPCore (x y z)
  :name "fabs fraction 1"
  :precision binary64
  (fabs (- (/ (+ x 4) y) (* (/ x y) z))))