Average Error: 26.8 → 16.0
Time: 24.0s
Precision: 64
\[\frac{\left(\left(x + y\right) \cdot z + \left(t + y\right) \cdot a\right) - y \cdot b}{\left(x + t\right) + y}\]
\[\begin{array}{l} \mathbf{if}\;y \le -1.967499584174674248364030486477827237773 \cdot 10^{140}:\\ \;\;\;\;\left(a + z\right) - b\\ \mathbf{elif}\;y \le -2.073956642809603980847998976244338730115 \cdot 10^{98}:\\ \;\;\;\;\frac{1}{\frac{\left(t + y\right) + x}{\left(\left(y + x\right) \cdot z + a \cdot \left(t + y\right)\right) - y \cdot b}}\\ \mathbf{elif}\;y \le -2.310983057827040438914549423634512128913 \cdot 10^{48}:\\ \;\;\;\;\left(a + z\right) - b\\ \mathbf{elif}\;y \le 3.386128128459719612981223918062857795656 \cdot 10^{60}:\\ \;\;\;\;\frac{1}{\frac{\left(t + y\right) + x}{\left(\left(y + x\right) \cdot z + a \cdot \left(t + y\right)\right) - y \cdot b}}\\ \mathbf{else}:\\ \;\;\;\;\left(a + z\right) - b\\ \end{array}\]
\frac{\left(\left(x + y\right) \cdot z + \left(t + y\right) \cdot a\right) - y \cdot b}{\left(x + t\right) + y}
\begin{array}{l}
\mathbf{if}\;y \le -1.967499584174674248364030486477827237773 \cdot 10^{140}:\\
\;\;\;\;\left(a + z\right) - b\\

\mathbf{elif}\;y \le -2.073956642809603980847998976244338730115 \cdot 10^{98}:\\
\;\;\;\;\frac{1}{\frac{\left(t + y\right) + x}{\left(\left(y + x\right) \cdot z + a \cdot \left(t + y\right)\right) - y \cdot b}}\\

\mathbf{elif}\;y \le -2.310983057827040438914549423634512128913 \cdot 10^{48}:\\
\;\;\;\;\left(a + z\right) - b\\

\mathbf{elif}\;y \le 3.386128128459719612981223918062857795656 \cdot 10^{60}:\\
\;\;\;\;\frac{1}{\frac{\left(t + y\right) + x}{\left(\left(y + x\right) \cdot z + a \cdot \left(t + y\right)\right) - y \cdot b}}\\

\mathbf{else}:\\
\;\;\;\;\left(a + z\right) - b\\

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r40667948 = x;
        double r40667949 = y;
        double r40667950 = r40667948 + r40667949;
        double r40667951 = z;
        double r40667952 = r40667950 * r40667951;
        double r40667953 = t;
        double r40667954 = r40667953 + r40667949;
        double r40667955 = a;
        double r40667956 = r40667954 * r40667955;
        double r40667957 = r40667952 + r40667956;
        double r40667958 = b;
        double r40667959 = r40667949 * r40667958;
        double r40667960 = r40667957 - r40667959;
        double r40667961 = r40667948 + r40667953;
        double r40667962 = r40667961 + r40667949;
        double r40667963 = r40667960 / r40667962;
        return r40667963;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r40667964 = y;
        double r40667965 = -1.9674995841746742e+140;
        bool r40667966 = r40667964 <= r40667965;
        double r40667967 = a;
        double r40667968 = z;
        double r40667969 = r40667967 + r40667968;
        double r40667970 = b;
        double r40667971 = r40667969 - r40667970;
        double r40667972 = -2.073956642809604e+98;
        bool r40667973 = r40667964 <= r40667972;
        double r40667974 = 1.0;
        double r40667975 = t;
        double r40667976 = r40667975 + r40667964;
        double r40667977 = x;
        double r40667978 = r40667976 + r40667977;
        double r40667979 = r40667964 + r40667977;
        double r40667980 = r40667979 * r40667968;
        double r40667981 = r40667967 * r40667976;
        double r40667982 = r40667980 + r40667981;
        double r40667983 = r40667964 * r40667970;
        double r40667984 = r40667982 - r40667983;
        double r40667985 = r40667978 / r40667984;
        double r40667986 = r40667974 / r40667985;
        double r40667987 = -2.3109830578270404e+48;
        bool r40667988 = r40667964 <= r40667987;
        double r40667989 = 3.3861281284597196e+60;
        bool r40667990 = r40667964 <= r40667989;
        double r40667991 = r40667990 ? r40667986 : r40667971;
        double r40667992 = r40667988 ? r40667971 : r40667991;
        double r40667993 = r40667973 ? r40667986 : r40667992;
        double r40667994 = r40667966 ? r40667971 : r40667993;
        return r40667994;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Bits error versus b

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original26.8
Target11.1
Herbie16.0
\[\begin{array}{l} \mathbf{if}\;\frac{\left(\left(x + y\right) \cdot z + \left(t + y\right) \cdot a\right) - y \cdot b}{\left(x + t\right) + y} \lt -3.581311708415056427521064305370896655752 \cdot 10^{153}:\\ \;\;\;\;\left(z + a\right) - b\\ \mathbf{elif}\;\frac{\left(\left(x + y\right) \cdot z + \left(t + y\right) \cdot a\right) - y \cdot b}{\left(x + t\right) + y} \lt 1.228596430831560895857110658734089400289 \cdot 10^{82}:\\ \;\;\;\;\frac{1}{\frac{\left(x + t\right) + y}{\left(\left(x + y\right) \cdot z + \left(t + y\right) \cdot a\right) - y \cdot b}}\\ \mathbf{else}:\\ \;\;\;\;\left(z + a\right) - b\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if y < -1.9674995841746742e+140 or -2.073956642809604e+98 < y < -2.3109830578270404e+48 or 3.3861281284597196e+60 < y

    1. Initial program 42.8

      \[\frac{\left(\left(x + y\right) \cdot z + \left(t + y\right) \cdot a\right) - y \cdot b}{\left(x + t\right) + y}\]
    2. Simplified42.8

      \[\leadsto \color{blue}{\frac{\left(a \cdot \left(y + t\right) + \left(y + x\right) \cdot z\right) - b \cdot y}{x + \left(y + t\right)}}\]
    3. Taylor expanded around inf 14.1

      \[\leadsto \color{blue}{\left(a + z\right) - b}\]

    if -1.9674995841746742e+140 < y < -2.073956642809604e+98 or -2.3109830578270404e+48 < y < 3.3861281284597196e+60

    1. Initial program 17.1

      \[\frac{\left(\left(x + y\right) \cdot z + \left(t + y\right) \cdot a\right) - y \cdot b}{\left(x + t\right) + y}\]
    2. Simplified17.1

      \[\leadsto \color{blue}{\frac{\left(a \cdot \left(y + t\right) + \left(y + x\right) \cdot z\right) - b \cdot y}{x + \left(y + t\right)}}\]
    3. Using strategy rm
    4. Applied clear-num17.2

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -1.967499584174674248364030486477827237773 \cdot 10^{140}:\\ \;\;\;\;\left(a + z\right) - b\\ \mathbf{elif}\;y \le -2.073956642809603980847998976244338730115 \cdot 10^{98}:\\ \;\;\;\;\frac{1}{\frac{\left(t + y\right) + x}{\left(\left(y + x\right) \cdot z + a \cdot \left(t + y\right)\right) - y \cdot b}}\\ \mathbf{elif}\;y \le -2.310983057827040438914549423634512128913 \cdot 10^{48}:\\ \;\;\;\;\left(a + z\right) - b\\ \mathbf{elif}\;y \le 3.386128128459719612981223918062857795656 \cdot 10^{60}:\\ \;\;\;\;\frac{1}{\frac{\left(t + y\right) + x}{\left(\left(y + x\right) \cdot z + a \cdot \left(t + y\right)\right) - y \cdot b}}\\ \mathbf{else}:\\ \;\;\;\;\left(a + z\right) - b\\ \end{array}\]

Reproduce

herbie shell --seed 2019179 
(FPCore (x y z t a b)
  :name "AI.Clustering.Hierarchical.Internal:ward from clustering-0.2.1"

  :herbie-target
  (if (< (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) -3.5813117084150564e+153) (- (+ z a) b) (if (< (/ (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)) (+ (+ x t) y)) 1.2285964308315609e+82) (/ 1.0 (/ (+ (+ x t) y) (- (+ (* (+ x y) z) (* (+ t y) a)) (* y b)))) (- (+ z a) b)))

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