Average Error: 2.0 → 2.1
Time: 12.7s
Precision: 64
\[\frac{x}{y} \cdot \left(z - t\right) + t\]
\[\begin{array}{l} \mathbf{if}\;z \le -3.003849201078750171591701483022669744276 \cdot 10^{-171}:\\ \;\;\;\;t + \frac{z - t}{\frac{y}{x}}\\ \mathbf{elif}\;z \le 5.190570701136931203412118291469813860427 \cdot 10^{-194}:\\ \;\;\;\;\frac{x \cdot \left(z - t\right)}{y} + t\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{y} \cdot \left(z - t\right) + t\\ \end{array}\]
\frac{x}{y} \cdot \left(z - t\right) + t
\begin{array}{l}
\mathbf{if}\;z \le -3.003849201078750171591701483022669744276 \cdot 10^{-171}:\\
\;\;\;\;t + \frac{z - t}{\frac{y}{x}}\\

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

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

\end{array}
double f(double x, double y, double z, double t) {
        double r514130 = x;
        double r514131 = y;
        double r514132 = r514130 / r514131;
        double r514133 = z;
        double r514134 = t;
        double r514135 = r514133 - r514134;
        double r514136 = r514132 * r514135;
        double r514137 = r514136 + r514134;
        return r514137;
}

double f(double x, double y, double z, double t) {
        double r514138 = z;
        double r514139 = -3.00384920107875e-171;
        bool r514140 = r514138 <= r514139;
        double r514141 = t;
        double r514142 = r514138 - r514141;
        double r514143 = y;
        double r514144 = x;
        double r514145 = r514143 / r514144;
        double r514146 = r514142 / r514145;
        double r514147 = r514141 + r514146;
        double r514148 = 5.190570701136931e-194;
        bool r514149 = r514138 <= r514148;
        double r514150 = r514144 * r514142;
        double r514151 = r514150 / r514143;
        double r514152 = r514151 + r514141;
        double r514153 = r514144 / r514143;
        double r514154 = r514153 * r514142;
        double r514155 = r514154 + r514141;
        double r514156 = r514149 ? r514152 : r514155;
        double r514157 = r514140 ? r514147 : r514156;
        return r514157;
}

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.0
Target2.1
Herbie2.1
\[\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 z < -3.00384920107875e-171

    1. Initial program 1.5

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

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

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

    if -3.00384920107875e-171 < z < 5.190570701136931e-194

    1. Initial program 3.3

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

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

    if 5.190570701136931e-194 < z

    1. Initial program 1.7

      \[\frac{x}{y} \cdot \left(z - t\right) + t\]
  3. Recombined 3 regimes into one program.
  4. Final simplification2.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -3.003849201078750171591701483022669744276 \cdot 10^{-171}:\\ \;\;\;\;t + \frac{z - t}{\frac{y}{x}}\\ \mathbf{elif}\;z \le 5.190570701136931203412118291469813860427 \cdot 10^{-194}:\\ \;\;\;\;\frac{x \cdot \left(z - t\right)}{y} + t\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{y} \cdot \left(z - t\right) + t\\ \end{array}\]

Reproduce

herbie shell --seed 2019350 
(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))