Average Error: 22.0 → 7.9
Time: 17.6s
Precision: binary64
\[\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)} \]
\[\begin{array}{l} \mathbf{if}\;z \leq -3.9399606018418395 \cdot 10^{+22} \lor \neg \left(z \leq 1.8313071631021404 \cdot 10^{+48}\right):\\ \;\;\;\;\frac{a}{y - b} - \mathsf{fma}\left(\frac{y}{z}, \frac{x}{y - b}, \mathsf{fma}\left(\frac{y}{z}, \frac{t}{{\left(y - b\right)}^{2}}, \frac{t}{y - b}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\begin{array}{l} t_1 := \left(y + z \cdot b\right) - z \cdot y\\ \left(\frac{z \cdot t}{t_1} + \frac{y \cdot x}{t_1}\right) - \frac{z \cdot a}{t_1} \end{array}\\ \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 \leq -3.9399606018418395 \cdot 10^{+22} \lor \neg \left(z \leq 1.8313071631021404 \cdot 10^{+48}\right):\\
\;\;\;\;\frac{a}{y - b} - \mathsf{fma}\left(\frac{y}{z}, \frac{x}{y - b}, \mathsf{fma}\left(\frac{y}{z}, \frac{t}{{\left(y - b\right)}^{2}}, \frac{t}{y - b}\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\begin{array}{l}
t_1 := \left(y + z \cdot b\right) - z \cdot y\\
\left(\frac{z \cdot t}{t_1} + \frac{y \cdot x}{t_1}\right) - \frac{z \cdot a}{t_1}
\end{array}\\


\end{array}
(FPCore (x y z t a b)
 :precision binary64
 (/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))))
(FPCore (x y z t a b)
 :precision binary64
 (if (or (<= z -3.9399606018418395e+22) (not (<= z 1.8313071631021404e+48)))
   (-
    (/ a (- y b))
    (fma
     (/ y z)
     (/ x (- y b))
     (fma (/ y z) (/ t (pow (- y b) 2.0)) (/ t (- y b)))))
   (let* ((t_1 (- (+ y (* z b)) (* z y))))
     (- (+ (/ (* z t) t_1) (/ (* y x) t_1)) (/ (* z a) t_1)))))
double code(double x, double y, double z, double t, double a, double b) {
	return ((x * y) + (z * (t - a))) / (y + (z * (b - y)));
}
double code(double x, double y, double z, double t, double a, double b) {
	double tmp;
	if ((z <= -3.9399606018418395e+22) || !(z <= 1.8313071631021404e+48)) {
		tmp = (a / (y - b)) - fma((y / z), (x / (y - b)), fma((y / z), (t / pow((y - b), 2.0)), (t / (y - b))));
	} else {
		double t_1 = (y + (z * b)) - (z * y);
		tmp = (((z * t) / t_1) + ((y * x) / t_1)) - ((z * a) / t_1);
	}
	return tmp;
}

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.0
Target16.9
Herbie7.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 < -3.9399606018418395e22 or 1.83130716310214038e48 < z

    1. Initial program 38.7

      \[\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)} \]
    2. Taylor expanded in z around -inf 21.9

      \[\leadsto \color{blue}{\left(\frac{y \cdot a}{z \cdot {\left(y - b\right)}^{2}} + \frac{a}{y - b}\right) - \left(\frac{y \cdot x}{z \cdot \left(y - b\right)} + \left(\frac{t}{y - b} + \frac{y \cdot t}{z \cdot {\left(y - b\right)}^{2}}\right)\right)} \]
    3. Simplified8.5

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{y}{z}, \frac{a}{{\left(y - b\right)}^{2}}, \frac{a}{y - b}\right) - \mathsf{fma}\left(\frac{y}{z}, \frac{x}{y - b}, \mathsf{fma}\left(\frac{y}{z}, \frac{t}{{\left(y - b\right)}^{2}}, \frac{t}{y - b}\right)\right)} \]
    4. Taylor expanded in z around inf 7.0

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

    if -3.9399606018418395e22 < z < 1.83130716310214038e48

    1. Initial program 8.6

      \[\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)} \]
    2. Taylor expanded in x around 0 8.6

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \leq -3.9399606018418395 \cdot 10^{+22} \lor \neg \left(z \leq 1.8313071631021404 \cdot 10^{+48}\right):\\ \;\;\;\;\frac{a}{y - b} - \mathsf{fma}\left(\frac{y}{z}, \frac{x}{y - b}, \mathsf{fma}\left(\frac{y}{z}, \frac{t}{{\left(y - b\right)}^{2}}, \frac{t}{y - b}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{z \cdot t}{\left(y + z \cdot b\right) - z \cdot y} + \frac{y \cdot x}{\left(y + z \cdot b\right) - z \cdot y}\right) - \frac{z \cdot a}{\left(y + z \cdot b\right) - z \cdot y}\\ \end{array} \]

Reproduce

herbie shell --seed 2022068 
(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)))))