Average Error: 26.8 → 17.6
Time: 18.2s
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.12340553540398282974395246595228861055 \cdot 10^{66}:\\ \;\;\;\;\left(a + z\right) - b\\ \mathbf{elif}\;y \le -1.472184673179024906311519965673653353206 \cdot 10^{-191}:\\ \;\;\;\;\left(a \cdot \left(y + t\right) + \left(\left(x + y\right) \cdot z - y \cdot b\right)\right) \cdot \frac{1}{x + \left(y + t\right)}\\ \mathbf{elif}\;y \le -1.624020243223143567434005918463591296748 \cdot 10^{-228}:\\ \;\;\;\;a\\ \mathbf{elif}\;y \le 0.001960496957535617142814876601164542080369:\\ \;\;\;\;\left(a \cdot \left(y + t\right) + \left(\left(x + y\right) \cdot z - y \cdot b\right)\right) \cdot \frac{1}{x + \left(y + t\right)}\\ \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.12340553540398282974395246595228861055 \cdot 10^{66}:\\
\;\;\;\;\left(a + z\right) - b\\

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

\mathbf{elif}\;y \le -1.624020243223143567434005918463591296748 \cdot 10^{-228}:\\
\;\;\;\;a\\

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

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r44720540 = x;
        double r44720541 = y;
        double r44720542 = r44720540 + r44720541;
        double r44720543 = z;
        double r44720544 = r44720542 * r44720543;
        double r44720545 = t;
        double r44720546 = r44720545 + r44720541;
        double r44720547 = a;
        double r44720548 = r44720546 * r44720547;
        double r44720549 = r44720544 + r44720548;
        double r44720550 = b;
        double r44720551 = r44720541 * r44720550;
        double r44720552 = r44720549 - r44720551;
        double r44720553 = r44720540 + r44720545;
        double r44720554 = r44720553 + r44720541;
        double r44720555 = r44720552 / r44720554;
        return r44720555;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r44720556 = y;
        double r44720557 = -1.1234055354039828e+66;
        bool r44720558 = r44720556 <= r44720557;
        double r44720559 = a;
        double r44720560 = z;
        double r44720561 = r44720559 + r44720560;
        double r44720562 = b;
        double r44720563 = r44720561 - r44720562;
        double r44720564 = -1.472184673179025e-191;
        bool r44720565 = r44720556 <= r44720564;
        double r44720566 = t;
        double r44720567 = r44720556 + r44720566;
        double r44720568 = r44720559 * r44720567;
        double r44720569 = x;
        double r44720570 = r44720569 + r44720556;
        double r44720571 = r44720570 * r44720560;
        double r44720572 = r44720556 * r44720562;
        double r44720573 = r44720571 - r44720572;
        double r44720574 = r44720568 + r44720573;
        double r44720575 = 1.0;
        double r44720576 = r44720569 + r44720567;
        double r44720577 = r44720575 / r44720576;
        double r44720578 = r44720574 * r44720577;
        double r44720579 = -1.6240202432231436e-228;
        bool r44720580 = r44720556 <= r44720579;
        double r44720581 = 0.001960496957535617;
        bool r44720582 = r44720556 <= r44720581;
        double r44720583 = r44720582 ? r44720578 : r44720563;
        double r44720584 = r44720580 ? r44720559 : r44720583;
        double r44720585 = r44720565 ? r44720578 : r44720584;
        double r44720586 = r44720558 ? r44720563 : r44720585;
        return r44720586;
}

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.6
Herbie17.6
\[\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 3 regimes
  2. if y < -1.1234055354039828e+66 or 0.001960496957535617 < y

    1. Initial program 39.5

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

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

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

    if -1.1234055354039828e+66 < y < -1.472184673179025e-191 or -1.6240202432231436e-228 < y < 0.001960496957535617

    1. Initial program 16.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. Simplified16.8

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

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

    if -1.472184673179025e-191 < y < -1.6240202432231436e-228

    1. Initial program 17.9

      \[\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.9

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

      \[\leadsto \color{blue}{\frac{1}{\frac{x + \left(y + t\right)}{\left(y + t\right) \cdot a + \left(z \cdot \left(x + y\right) - b \cdot y\right)}}}\]
    5. Taylor expanded around 0 41.8

      \[\leadsto \color{blue}{a}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification17.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -1.12340553540398282974395246595228861055 \cdot 10^{66}:\\ \;\;\;\;\left(a + z\right) - b\\ \mathbf{elif}\;y \le -1.472184673179024906311519965673653353206 \cdot 10^{-191}:\\ \;\;\;\;\left(a \cdot \left(y + t\right) + \left(\left(x + y\right) \cdot z - y \cdot b\right)\right) \cdot \frac{1}{x + \left(y + t\right)}\\ \mathbf{elif}\;y \le -1.624020243223143567434005918463591296748 \cdot 10^{-228}:\\ \;\;\;\;a\\ \mathbf{elif}\;y \le 0.001960496957535617142814876601164542080369:\\ \;\;\;\;\left(a \cdot \left(y + t\right) + \left(\left(x + y\right) \cdot z - y \cdot b\right)\right) \cdot \frac{1}{x + \left(y + t\right)}\\ \mathbf{else}:\\ \;\;\;\;\left(a + z\right) - b\\ \end{array}\]

Reproduce

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