Average Error: 1.9 → 1.9
Time: 3.9s
Precision: 64
\[\frac{x - y}{z - y} \cdot t\]
\[\begin{array}{l} \mathbf{if}\;t \le 3.2554078815889216 \cdot 10^{-281} \lor \neg \left(t \le 2.67299805340548718 \cdot 10^{-148}\right):\\ \;\;\;\;\frac{x - y}{z - y} \cdot t\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(x - y\right) \cdot t}{z - y}\\ \end{array}\]
\frac{x - y}{z - y} \cdot t
\begin{array}{l}
\mathbf{if}\;t \le 3.2554078815889216 \cdot 10^{-281} \lor \neg \left(t \le 2.67299805340548718 \cdot 10^{-148}\right):\\
\;\;\;\;\frac{x - y}{z - y} \cdot t\\

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

\end{array}
double f(double x, double y, double z, double t) {
        double r441032 = x;
        double r441033 = y;
        double r441034 = r441032 - r441033;
        double r441035 = z;
        double r441036 = r441035 - r441033;
        double r441037 = r441034 / r441036;
        double r441038 = t;
        double r441039 = r441037 * r441038;
        return r441039;
}

double f(double x, double y, double z, double t) {
        double r441040 = t;
        double r441041 = 3.2554078815889216e-281;
        bool r441042 = r441040 <= r441041;
        double r441043 = 2.6729980534054872e-148;
        bool r441044 = r441040 <= r441043;
        double r441045 = !r441044;
        bool r441046 = r441042 || r441045;
        double r441047 = x;
        double r441048 = y;
        double r441049 = r441047 - r441048;
        double r441050 = z;
        double r441051 = r441050 - r441048;
        double r441052 = r441049 / r441051;
        double r441053 = r441052 * r441040;
        double r441054 = r441049 * r441040;
        double r441055 = r441054 / r441051;
        double r441056 = r441046 ? r441053 : r441055;
        return r441056;
}

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

Original1.9
Target2.0
Herbie1.9
\[\frac{t}{\frac{z - y}{x - y}}\]

Derivation

  1. Split input into 2 regimes
  2. if t < 3.2554078815889216e-281 or 2.6729980534054872e-148 < t

    1. Initial program 1.9

      \[\frac{x - y}{z - y} \cdot t\]

    if 3.2554078815889216e-281 < t < 2.6729980534054872e-148

    1. Initial program 1.8

      \[\frac{x - y}{z - y} \cdot t\]
    2. Using strategy rm
    3. Applied associate-*l/1.8

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;t \le 3.2554078815889216 \cdot 10^{-281} \lor \neg \left(t \le 2.67299805340548718 \cdot 10^{-148}\right):\\ \;\;\;\;\frac{x - y}{z - y} \cdot t\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(x - y\right) \cdot t}{z - y}\\ \end{array}\]

Reproduce

herbie shell --seed 2020018 +o rules:numerics
(FPCore (x y z t)
  :name "Numeric.Signal.Multichannel:$cput from hsignal-0.2.7.1"
  :precision binary64

  :herbie-target
  (/ t (/ (- z y) (- x y)))

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