Average Error: 2.2 → 1.2
Time: 18.1s
Precision: 64
\[\frac{x}{y} \cdot \left(z - t\right) + t\]
\[\begin{array}{l} \mathbf{if}\;y \le -15878348927688876927630704640:\\ \;\;\;\;\frac{z - t}{y} \cdot x + t\\ \mathbf{elif}\;y \le 2.540376884917199652102681276732018106493 \cdot 10^{-48}:\\ \;\;\;\;\frac{\left(z - t\right) \cdot x}{y} + t\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{z}{y}}{\frac{1}{x}} - \left(\frac{t}{\frac{y}{x}} - t\right)\\ \end{array}\]
\frac{x}{y} \cdot \left(z - t\right) + t
\begin{array}{l}
\mathbf{if}\;y \le -15878348927688876927630704640:\\
\;\;\;\;\frac{z - t}{y} \cdot x + t\\

\mathbf{elif}\;y \le 2.540376884917199652102681276732018106493 \cdot 10^{-48}:\\
\;\;\;\;\frac{\left(z - t\right) \cdot x}{y} + t\\

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

\end{array}
double f(double x, double y, double z, double t) {
        double r310554 = x;
        double r310555 = y;
        double r310556 = r310554 / r310555;
        double r310557 = z;
        double r310558 = t;
        double r310559 = r310557 - r310558;
        double r310560 = r310556 * r310559;
        double r310561 = r310560 + r310558;
        return r310561;
}

double f(double x, double y, double z, double t) {
        double r310562 = y;
        double r310563 = -1.5878348927688877e+28;
        bool r310564 = r310562 <= r310563;
        double r310565 = z;
        double r310566 = t;
        double r310567 = r310565 - r310566;
        double r310568 = r310567 / r310562;
        double r310569 = x;
        double r310570 = r310568 * r310569;
        double r310571 = r310570 + r310566;
        double r310572 = 2.5403768849171997e-48;
        bool r310573 = r310562 <= r310572;
        double r310574 = r310567 * r310569;
        double r310575 = r310574 / r310562;
        double r310576 = r310575 + r310566;
        double r310577 = r310565 / r310562;
        double r310578 = 1.0;
        double r310579 = r310578 / r310569;
        double r310580 = r310577 / r310579;
        double r310581 = r310562 / r310569;
        double r310582 = r310566 / r310581;
        double r310583 = r310582 - r310566;
        double r310584 = r310580 - r310583;
        double r310585 = r310573 ? r310576 : r310584;
        double r310586 = r310564 ? r310571 : r310585;
        return r310586;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original2.2
Target2.4
Herbie1.2
\[\begin{array}{l} \mathbf{if}\;z \lt 2.759456554562692182563154937894909044548 \cdot 10^{-282}:\\ \;\;\;\;\frac{x}{y} \cdot \left(z - t\right) + t\\ \mathbf{elif}\;z \lt 2.32699445087443595687739933019129648094 \cdot 10^{-110}:\\ \;\;\;\;x \cdot \frac{z - t}{y} + t\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{y} \cdot \left(z - t\right) + t\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if y < -1.5878348927688877e+28

    1. Initial program 1.0

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

      \[\leadsto \color{blue}{\left(\frac{x \cdot z}{y} - \frac{t \cdot x}{y}\right)} + t\]
    3. Simplified1.1

      \[\leadsto \color{blue}{\frac{z - t}{\frac{y}{x}}} + t\]
    4. Using strategy rm
    5. Applied associate-/r/1.0

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

    if -1.5878348927688877e+28 < y < 2.5403768849171997e-48

    1. Initial program 4.2

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

      \[\leadsto \color{blue}{\left(\frac{x \cdot z}{y} - \frac{t \cdot x}{y}\right)} + t\]
    3. Simplified3.8

      \[\leadsto \color{blue}{\frac{z - t}{\frac{y}{x}}} + t\]
    4. Taylor expanded around 0 1.6

      \[\leadsto \color{blue}{\left(\frac{x \cdot z}{y} - \frac{t \cdot x}{y}\right)} + t\]
    5. Simplified1.6

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

    if 2.5403768849171997e-48 < y

    1. Initial program 1.0

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

      \[\leadsto \color{blue}{\left(\frac{x \cdot z}{y} - \frac{t \cdot x}{y}\right)} + t\]
    3. Simplified1.2

      \[\leadsto \color{blue}{\frac{z - t}{\frac{y}{x}}} + t\]
    4. Using strategy rm
    5. Applied div-sub1.2

      \[\leadsto \color{blue}{\left(\frac{z}{\frac{y}{x}} - \frac{t}{\frac{y}{x}}\right)} + t\]
    6. Applied associate-+l-1.2

      \[\leadsto \color{blue}{\frac{z}{\frac{y}{x}} - \left(\frac{t}{\frac{y}{x}} - t\right)}\]
    7. Using strategy rm
    8. Applied div-inv1.2

      \[\leadsto \frac{z}{\color{blue}{y \cdot \frac{1}{x}}} - \left(\frac{t}{\frac{y}{x}} - t\right)\]
    9. Applied associate-/r*1.0

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -15878348927688876927630704640:\\ \;\;\;\;\frac{z - t}{y} \cdot x + t\\ \mathbf{elif}\;y \le 2.540376884917199652102681276732018106493 \cdot 10^{-48}:\\ \;\;\;\;\frac{\left(z - t\right) \cdot x}{y} + t\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{z}{y}}{\frac{1}{x}} - \left(\frac{t}{\frac{y}{x}} - t\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019323 
(FPCore (x y z t)
  :name "Numeric.Signal.Multichannel:$cget from hsignal-0.2.7.1"
  :precision binary64

  :herbie-target
  (if (< z 2.759456554562692e-282) (+ (* (/ x y) (- z t)) t) (if (< z 2.326994450874436e-110) (+ (* x (/ (- z t) y)) t) (+ (* (/ x y) (- z t)) t)))

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