Average Error: 27.0 → 16.0
Time: 6.3s
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.9117574672565738 \cdot 10^{83} \lor \neg \left(y \le 1.3202613471666877 \cdot 10^{132}\right):\\ \;\;\;\;\left(a + z\right) - b\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(x + y\right) \cdot z + \mathsf{fma}\left(y, a - b, a \cdot t\right)}{\left(x + t\right) + y}\\ \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.9117574672565738 \cdot 10^{83} \lor \neg \left(y \le 1.3202613471666877 \cdot 10^{132}\right):\\
\;\;\;\;\left(a + z\right) - b\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r1221825 = x;
        double r1221826 = y;
        double r1221827 = r1221825 + r1221826;
        double r1221828 = z;
        double r1221829 = r1221827 * r1221828;
        double r1221830 = t;
        double r1221831 = r1221830 + r1221826;
        double r1221832 = a;
        double r1221833 = r1221831 * r1221832;
        double r1221834 = r1221829 + r1221833;
        double r1221835 = b;
        double r1221836 = r1221826 * r1221835;
        double r1221837 = r1221834 - r1221836;
        double r1221838 = r1221825 + r1221830;
        double r1221839 = r1221838 + r1221826;
        double r1221840 = r1221837 / r1221839;
        return r1221840;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r1221841 = y;
        double r1221842 = -1.9117574672565738e+83;
        bool r1221843 = r1221841 <= r1221842;
        double r1221844 = 1.3202613471666877e+132;
        bool r1221845 = r1221841 <= r1221844;
        double r1221846 = !r1221845;
        bool r1221847 = r1221843 || r1221846;
        double r1221848 = a;
        double r1221849 = z;
        double r1221850 = r1221848 + r1221849;
        double r1221851 = b;
        double r1221852 = r1221850 - r1221851;
        double r1221853 = x;
        double r1221854 = r1221853 + r1221841;
        double r1221855 = r1221854 * r1221849;
        double r1221856 = r1221848 - r1221851;
        double r1221857 = t;
        double r1221858 = r1221848 * r1221857;
        double r1221859 = fma(r1221841, r1221856, r1221858);
        double r1221860 = r1221855 + r1221859;
        double r1221861 = r1221853 + r1221857;
        double r1221862 = r1221861 + r1221841;
        double r1221863 = r1221860 / r1221862;
        double r1221864 = r1221847 ? r1221852 : r1221863;
        return r1221864;
}

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

Original27.0
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.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 < -1.9117574672565738e+83 or 1.3202613471666877e+132 < y

    1. Initial program 46.0

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

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

      \[\leadsto \frac{\left(x + y\right) \cdot z + \color{blue}{\mathsf{fma}\left(y, a - b, a \cdot t\right)}}{\left(x + t\right) + y}\]
    5. Using strategy rm
    6. Applied clear-num46.0

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

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

    if -1.9117574672565738e+83 < y < 1.3202613471666877e+132

    1. Initial program 17.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. Using strategy rm
    3. Applied associate--l+17.8

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -1.9117574672565738 \cdot 10^{83} \lor \neg \left(y \le 1.3202613471666877 \cdot 10^{132}\right):\\ \;\;\;\;\left(a + z\right) - b\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(x + y\right) \cdot z + \mathsf{fma}\left(y, a - b, a \cdot t\right)}{\left(x + t\right) + y}\\ \end{array}\]

Reproduce

herbie shell --seed 2020034 +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)))