Average Error: 26.4 → 23.9
Time: 25.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}\;z \le -1.061610428241891645480708199708681011513 \cdot 10^{213}:\\ \;\;\;\;z\\ \mathbf{elif}\;z \le -79984826952145731778421884972492363137020:\\ \;\;\;\;\frac{\mathsf{fma}\left(a, t + y, \mathsf{fma}\left(x, z, y \cdot \left(z - b\right)\right)\right)}{\left(x + t\right) + y}\\ \mathbf{elif}\;z \le -1.299216067398793496033270482516750923125 \cdot 10^{-13}:\\ \;\;\;\;a\\ \mathbf{elif}\;z \le 1.515482064664791338217368179176752602296 \cdot 10^{167}:\\ \;\;\;\;\frac{\mathsf{fma}\left(a, t + y, \mathsf{fma}\left(x, z, y \cdot \left(z - b\right)\right)\right)}{\left(x + t\right) + y}\\ \mathbf{else}:\\ \;\;\;\;z\\ \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}\;z \le -1.061610428241891645480708199708681011513 \cdot 10^{213}:\\
\;\;\;\;z\\

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

\mathbf{elif}\;z \le -1.299216067398793496033270482516750923125 \cdot 10^{-13}:\\
\;\;\;\;a\\

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

\mathbf{else}:\\
\;\;\;\;z\\

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r592185 = x;
        double r592186 = y;
        double r592187 = r592185 + r592186;
        double r592188 = z;
        double r592189 = r592187 * r592188;
        double r592190 = t;
        double r592191 = r592190 + r592186;
        double r592192 = a;
        double r592193 = r592191 * r592192;
        double r592194 = r592189 + r592193;
        double r592195 = b;
        double r592196 = r592186 * r592195;
        double r592197 = r592194 - r592196;
        double r592198 = r592185 + r592190;
        double r592199 = r592198 + r592186;
        double r592200 = r592197 / r592199;
        return r592200;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r592201 = z;
        double r592202 = -1.0616104282418916e+213;
        bool r592203 = r592201 <= r592202;
        double r592204 = -7.998482695214573e+40;
        bool r592205 = r592201 <= r592204;
        double r592206 = a;
        double r592207 = t;
        double r592208 = y;
        double r592209 = r592207 + r592208;
        double r592210 = x;
        double r592211 = b;
        double r592212 = r592201 - r592211;
        double r592213 = r592208 * r592212;
        double r592214 = fma(r592210, r592201, r592213);
        double r592215 = fma(r592206, r592209, r592214);
        double r592216 = r592210 + r592207;
        double r592217 = r592216 + r592208;
        double r592218 = r592215 / r592217;
        double r592219 = -1.2992160673987935e-13;
        bool r592220 = r592201 <= r592219;
        double r592221 = 1.5154820646647913e+167;
        bool r592222 = r592201 <= r592221;
        double r592223 = r592222 ? r592218 : r592201;
        double r592224 = r592220 ? r592206 : r592223;
        double r592225 = r592205 ? r592218 : r592224;
        double r592226 = r592203 ? r592201 : r592225;
        return r592226;
}

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

Original26.4
Target11.2
Herbie23.9
\[\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 z < -1.0616104282418916e+213 or 1.5154820646647913e+167 < z

    1. Initial program 43.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. Simplified43.8

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

      \[\leadsto \color{blue}{z}\]

    if -1.0616104282418916e+213 < z < -7.998482695214573e+40 or -1.2992160673987935e-13 < z < 1.5154820646647913e+167

    1. Initial program 22.3

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

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

    if -7.998482695214573e+40 < z < -1.2992160673987935e-13

    1. Initial program 22.3

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1.061610428241891645480708199708681011513 \cdot 10^{213}:\\ \;\;\;\;z\\ \mathbf{elif}\;z \le -79984826952145731778421884972492363137020:\\ \;\;\;\;\frac{\mathsf{fma}\left(a, t + y, \mathsf{fma}\left(x, z, y \cdot \left(z - b\right)\right)\right)}{\left(x + t\right) + y}\\ \mathbf{elif}\;z \le -1.299216067398793496033270482516750923125 \cdot 10^{-13}:\\ \;\;\;\;a\\ \mathbf{elif}\;z \le 1.515482064664791338217368179176752602296 \cdot 10^{167}:\\ \;\;\;\;\frac{\mathsf{fma}\left(a, t + y, \mathsf{fma}\left(x, z, y \cdot \left(z - b\right)\right)\right)}{\left(x + t\right) + y}\\ \mathbf{else}:\\ \;\;\;\;z\\ \end{array}\]

Reproduce

herbie shell --seed 2019325 +o rules:numerics
(FPCore (x y z t a b)
  :name "AI.Clustering.Hierarchical.Internal:ward from clustering-0.2.1"
  :precision binary64

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