Average Error: 22.4 → 17.9
Time: 6.7s
Precision: 64
\[\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)}\]
\[\begin{array}{l} \mathbf{if}\;z \le -5.783355807704604230086730940215264291525 \cdot 10^{-229} \lor \neg \left(z \le 1.3630801030974825092593943861048567836 \cdot 10^{-270}\right):\\ \;\;\;\;\frac{1}{\frac{\mathsf{fma}\left(z, b - y, y\right)}{\mathsf{fma}\left(t, z, x \cdot y\right)}} - \frac{a}{\left(\frac{y}{z} + b\right) - y}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(x, z, x\right) - \frac{a}{\left(\frac{y}{z} + b\right) - y}\\ \end{array}\]
\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)}
\begin{array}{l}
\mathbf{if}\;z \le -5.783355807704604230086730940215264291525 \cdot 10^{-229} \lor \neg \left(z \le 1.3630801030974825092593943861048567836 \cdot 10^{-270}\right):\\
\;\;\;\;\frac{1}{\frac{\mathsf{fma}\left(z, b - y, y\right)}{\mathsf{fma}\left(t, z, x \cdot y\right)}} - \frac{a}{\left(\frac{y}{z} + b\right) - y}\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r1071073 = x;
        double r1071074 = y;
        double r1071075 = r1071073 * r1071074;
        double r1071076 = z;
        double r1071077 = t;
        double r1071078 = a;
        double r1071079 = r1071077 - r1071078;
        double r1071080 = r1071076 * r1071079;
        double r1071081 = r1071075 + r1071080;
        double r1071082 = b;
        double r1071083 = r1071082 - r1071074;
        double r1071084 = r1071076 * r1071083;
        double r1071085 = r1071074 + r1071084;
        double r1071086 = r1071081 / r1071085;
        return r1071086;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r1071087 = z;
        double r1071088 = -5.783355807704604e-229;
        bool r1071089 = r1071087 <= r1071088;
        double r1071090 = 1.3630801030974825e-270;
        bool r1071091 = r1071087 <= r1071090;
        double r1071092 = !r1071091;
        bool r1071093 = r1071089 || r1071092;
        double r1071094 = 1.0;
        double r1071095 = b;
        double r1071096 = y;
        double r1071097 = r1071095 - r1071096;
        double r1071098 = fma(r1071087, r1071097, r1071096);
        double r1071099 = t;
        double r1071100 = x;
        double r1071101 = r1071100 * r1071096;
        double r1071102 = fma(r1071099, r1071087, r1071101);
        double r1071103 = r1071098 / r1071102;
        double r1071104 = r1071094 / r1071103;
        double r1071105 = a;
        double r1071106 = r1071096 / r1071087;
        double r1071107 = r1071106 + r1071095;
        double r1071108 = r1071107 - r1071096;
        double r1071109 = r1071105 / r1071108;
        double r1071110 = r1071104 - r1071109;
        double r1071111 = fma(r1071100, r1071087, r1071100);
        double r1071112 = r1071111 - r1071109;
        double r1071113 = r1071093 ? r1071110 : r1071112;
        return r1071113;
}

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

Original22.4
Target17.4
Herbie17.9
\[\frac{z \cdot t + y \cdot x}{y + z \cdot \left(b - y\right)} - \frac{a}{\left(b - y\right) + \frac{y}{z}}\]

Derivation

  1. Split input into 2 regimes
  2. if z < -5.783355807704604e-229 or 1.3630801030974825e-270 < z

    1. Initial program 23.8

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

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

      \[\leadsto \frac{x \cdot y + \color{blue}{\left(z \cdot t + z \cdot \left(-a\right)\right)}}{y + z \cdot \left(b - y\right)}\]
    5. Using strategy rm
    6. Applied distribute-rgt-neg-out23.8

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

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

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

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

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

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

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

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

    if -5.783355807704604e-229 < z < 1.3630801030974825e-270

    1. Initial program 9.7

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

      \[\leadsto \frac{x \cdot y + z \cdot \color{blue}{\left(t + \left(-a\right)\right)}}{y + z \cdot \left(b - y\right)}\]
    4. Applied distribute-lft-in9.7

      \[\leadsto \frac{x \cdot y + \color{blue}{\left(z \cdot t + z \cdot \left(-a\right)\right)}}{y + z \cdot \left(b - y\right)}\]
    5. Using strategy rm
    6. Applied distribute-rgt-neg-out9.7

      \[\leadsto \frac{x \cdot y + \left(z \cdot t + \color{blue}{\left(-z \cdot a\right)}\right)}{y + z \cdot \left(b - y\right)}\]
    7. Applied unsub-neg9.7

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

      \[\leadsto \frac{\color{blue}{\left(x \cdot y + z \cdot t\right) - z \cdot a}}{y + z \cdot \left(b - y\right)}\]
    9. Applied div-sub9.7

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

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

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

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

      \[\leadsto \color{blue}{\left(x \cdot z + x\right)} - \frac{a}{\left(\frac{y}{z} + b\right) - y}\]
    14. Simplified14.9

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

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

Reproduce

herbie shell --seed 2019362 +o rules:numerics
(FPCore (x y z t a b)
  :name "Development.Shake.Progress:decay from shake-0.15.5"
  :precision binary64

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

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