Average Error: 25.4 → 15.4
Time: 19.8s
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 -2.6725091383027097 \cdot 10^{+73}:\\ \;\;\;\;\left(a + z\right) - b\\ \mathbf{elif}\;y \le 2.0423114556484996 \cdot 10^{+85}:\\ \;\;\;\;\frac{\mathsf{fma}\left(z, x, \mathsf{fma}\left(a, t, \left(\left(a + z\right) - b\right) \cdot y\right)\right)}{\left(y + t\right) + x}\\ \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 -2.6725091383027097 \cdot 10^{+73}:\\
\;\;\;\;\left(a + z\right) - b\\

\mathbf{elif}\;y \le 2.0423114556484996 \cdot 10^{+85}:\\
\;\;\;\;\frac{\mathsf{fma}\left(z, x, \mathsf{fma}\left(a, t, \left(\left(a + z\right) - b\right) \cdot y\right)\right)}{\left(y + t\right) + x}\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r46541609 = x;
        double r46541610 = y;
        double r46541611 = r46541609 + r46541610;
        double r46541612 = z;
        double r46541613 = r46541611 * r46541612;
        double r46541614 = t;
        double r46541615 = r46541614 + r46541610;
        double r46541616 = a;
        double r46541617 = r46541615 * r46541616;
        double r46541618 = r46541613 + r46541617;
        double r46541619 = b;
        double r46541620 = r46541610 * r46541619;
        double r46541621 = r46541618 - r46541620;
        double r46541622 = r46541609 + r46541614;
        double r46541623 = r46541622 + r46541610;
        double r46541624 = r46541621 / r46541623;
        return r46541624;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r46541625 = y;
        double r46541626 = -2.6725091383027097e+73;
        bool r46541627 = r46541625 <= r46541626;
        double r46541628 = a;
        double r46541629 = z;
        double r46541630 = r46541628 + r46541629;
        double r46541631 = b;
        double r46541632 = r46541630 - r46541631;
        double r46541633 = 2.0423114556484996e+85;
        bool r46541634 = r46541625 <= r46541633;
        double r46541635 = x;
        double r46541636 = t;
        double r46541637 = r46541632 * r46541625;
        double r46541638 = fma(r46541628, r46541636, r46541637);
        double r46541639 = fma(r46541629, r46541635, r46541638);
        double r46541640 = r46541625 + r46541636;
        double r46541641 = r46541640 + r46541635;
        double r46541642 = r46541639 / r46541641;
        double r46541643 = r46541634 ? r46541642 : r46541632;
        double r46541644 = r46541627 ? r46541632 : r46541643;
        return r46541644;
}

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

Target

Original25.4
Target11.2
Herbie15.4
\[\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.5813117084150564 \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.2285964308315609 \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 < -2.6725091383027097e+73 or 2.0423114556484996e+85 < y

    1. Initial program 41.2

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

      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(z, x, \mathsf{fma}\left(a, t, \left(\left(z + a\right) - b\right) \cdot y\right)\right)}{x + \left(y + t\right)}}\]
    3. Taylor expanded around 0 14.4

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

    if -2.6725091383027097e+73 < y < 2.0423114556484996e+85

    1. Initial program 15.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. Simplified16.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -2.6725091383027097 \cdot 10^{+73}:\\ \;\;\;\;\left(a + z\right) - b\\ \mathbf{elif}\;y \le 2.0423114556484996 \cdot 10^{+85}:\\ \;\;\;\;\frac{\mathsf{fma}\left(z, x, \mathsf{fma}\left(a, t, \left(\left(a + z\right) - b\right) \cdot y\right)\right)}{\left(y + t\right) + x}\\ \mathbf{else}:\\ \;\;\;\;\left(a + z\right) - b\\ \end{array}\]

Reproduce

herbie shell --seed 2019168 +o rules:numerics
(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 (/ (+ (+ 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)))