Average Error: 23.8 → 19.7
Time: 14.1s
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 -1.285204343974009 \cdot 10^{172} \lor \neg \left(z \le 1.6215554508775919 \cdot 10^{125}\right):\\ \;\;\;\;\frac{t}{b} - \frac{a}{b}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{\mathsf{fma}\left(z, b - y, y\right)}{\mathsf{fma}\left(x, y, z \cdot \left(t - a\right)\right)}}\\ \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 -1.285204343974009 \cdot 10^{172} \lor \neg \left(z \le 1.6215554508775919 \cdot 10^{125}\right):\\
\;\;\;\;\frac{t}{b} - \frac{a}{b}\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r686650 = x;
        double r686651 = y;
        double r686652 = r686650 * r686651;
        double r686653 = z;
        double r686654 = t;
        double r686655 = a;
        double r686656 = r686654 - r686655;
        double r686657 = r686653 * r686656;
        double r686658 = r686652 + r686657;
        double r686659 = b;
        double r686660 = r686659 - r686651;
        double r686661 = r686653 * r686660;
        double r686662 = r686651 + r686661;
        double r686663 = r686658 / r686662;
        return r686663;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r686664 = z;
        double r686665 = -1.285204343974009e+172;
        bool r686666 = r686664 <= r686665;
        double r686667 = 1.621555450877592e+125;
        bool r686668 = r686664 <= r686667;
        double r686669 = !r686668;
        bool r686670 = r686666 || r686669;
        double r686671 = t;
        double r686672 = b;
        double r686673 = r686671 / r686672;
        double r686674 = a;
        double r686675 = r686674 / r686672;
        double r686676 = r686673 - r686675;
        double r686677 = 1.0;
        double r686678 = y;
        double r686679 = r686672 - r686678;
        double r686680 = fma(r686664, r686679, r686678);
        double r686681 = x;
        double r686682 = r686671 - r686674;
        double r686683 = r686664 * r686682;
        double r686684 = fma(r686681, r686678, r686683);
        double r686685 = r686680 / r686684;
        double r686686 = r686677 / r686685;
        double r686687 = r686670 ? r686676 : r686686;
        return r686687;
}

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

Original23.8
Target18.5
Herbie19.7
\[\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 < -1.285204343974009e+172 or 1.621555450877592e+125 < z

    1. Initial program 49.9

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

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

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

      \[\leadsto \color{blue}{\frac{t}{b} - \frac{a}{b}}\]

    if -1.285204343974009e+172 < z < 1.621555450877592e+125

    1. Initial program 14.8

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

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

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

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

Reproduce

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