Average Error: 2.3 → 2.8
Time: 43.8s
Precision: 64
\[\frac{x}{y} \cdot \left(z - t\right) + t\]
\[\begin{array}{l} \mathbf{if}\;y \le -1.214276496349715308350212003616713772243 \cdot 10^{208}:\\ \;\;\;\;\left(z - t\right) \cdot \frac{x}{y} + t\\ \mathbf{elif}\;y \le 3.810917599276301682261457087969902172823 \cdot 10^{77}:\\ \;\;\;\;t + \frac{x \cdot \left(z - t\right)}{y}\\ \mathbf{else}:\\ \;\;\;\;t + \frac{z - t}{y} \cdot x\\ \end{array}\]
\frac{x}{y} \cdot \left(z - t\right) + t
\begin{array}{l}
\mathbf{if}\;y \le -1.214276496349715308350212003616713772243 \cdot 10^{208}:\\
\;\;\;\;\left(z - t\right) \cdot \frac{x}{y} + t\\

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

\mathbf{else}:\\
\;\;\;\;t + \frac{z - t}{y} \cdot x\\

\end{array}
double f(double x, double y, double z, double t) {
        double r22982905 = x;
        double r22982906 = y;
        double r22982907 = r22982905 / r22982906;
        double r22982908 = z;
        double r22982909 = t;
        double r22982910 = r22982908 - r22982909;
        double r22982911 = r22982907 * r22982910;
        double r22982912 = r22982911 + r22982909;
        return r22982912;
}

double f(double x, double y, double z, double t) {
        double r22982913 = y;
        double r22982914 = -1.2142764963497153e+208;
        bool r22982915 = r22982913 <= r22982914;
        double r22982916 = z;
        double r22982917 = t;
        double r22982918 = r22982916 - r22982917;
        double r22982919 = x;
        double r22982920 = r22982919 / r22982913;
        double r22982921 = r22982918 * r22982920;
        double r22982922 = r22982921 + r22982917;
        double r22982923 = 3.8109175992763017e+77;
        bool r22982924 = r22982913 <= r22982923;
        double r22982925 = r22982919 * r22982918;
        double r22982926 = r22982925 / r22982913;
        double r22982927 = r22982917 + r22982926;
        double r22982928 = r22982918 / r22982913;
        double r22982929 = r22982928 * r22982919;
        double r22982930 = r22982917 + r22982929;
        double r22982931 = r22982924 ? r22982927 : r22982930;
        double r22982932 = r22982915 ? r22982922 : r22982931;
        return r22982932;
}

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.3
Target2.5
Herbie2.8
\[\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.2142764963497153e+208

    1. Initial program 1.8

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

    if -1.2142764963497153e+208 < y < 3.8109175992763017e+77

    1. Initial program 2.8

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

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

    if 3.8109175992763017e+77 < y

    1. Initial program 1.1

      \[\frac{x}{y} \cdot \left(z - t\right) + t\]
    2. Using strategy rm
    3. Applied div-inv1.1

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

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

      \[\leadsto x \cdot \color{blue}{\frac{z - t}{y}} + t\]
  3. Recombined 3 regimes into one program.
  4. Final simplification2.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -1.214276496349715308350212003616713772243 \cdot 10^{208}:\\ \;\;\;\;\left(z - t\right) \cdot \frac{x}{y} + t\\ \mathbf{elif}\;y \le 3.810917599276301682261457087969902172823 \cdot 10^{77}:\\ \;\;\;\;t + \frac{x \cdot \left(z - t\right)}{y}\\ \mathbf{else}:\\ \;\;\;\;t + \frac{z - t}{y} \cdot x\\ \end{array}\]

Reproduce

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

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