Average Error: 23.9 → 1.8
Time: 10.7s
Precision: binary64
\[\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)} \]
\[\begin{array}{l} t_1 := \frac{z \cdot \left(t - a\right) + x \cdot y}{y + z \cdot \left(b - y\right)}\\ t_2 := \mathsf{fma}\left(z, b - y, y\right)\\ t_3 := \frac{x \cdot y + \left(z \cdot t - z \cdot a\right)}{t_2}\\ t_4 := \frac{t - a}{b - y}\\ t_5 := x \cdot {\left(\frac{t_2}{y}\right)}^{-1} + t_4\\ t_6 := \mathsf{fma}\left(-1, \frac{x}{\frac{b - y}{y}}, \frac{y}{\frac{{\left(b - y\right)}^{2}}{t - a}}\right)\\ t_7 := t_4 + \left(\frac{y}{\frac{\left(b - y\right) \cdot \left(z \cdot z\right)}{t_6}} - \frac{t_6}{z}\right)\\ \mathbf{if}\;t_1 \leq -1 \cdot 10^{+271}:\\ \;\;\;\;t_5\\ \mathbf{elif}\;t_1 \leq -4 \cdot 10^{-225}:\\ \;\;\;\;t_3\\ \mathbf{elif}\;t_1 \leq 0:\\ \;\;\;\;t_7\\ \mathbf{elif}\;t_1 \leq 4 \cdot 10^{+256}:\\ \;\;\;\;t_3\\ \mathbf{elif}\;t_1 \leq \infty:\\ \;\;\;\;t_5\\ \mathbf{else}:\\ \;\;\;\;t_7\\ \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
 (let* ((t_1 (/ (+ (* z (- t a)) (* x y)) (+ y (* z (- b y)))))
        (t_2 (fma z (- b y) y))
        (t_3 (/ (+ (* x y) (- (* z t) (* z a))) t_2))
        (t_4 (/ (- t a) (- b y)))
        (t_5 (+ (* x (pow (/ t_2 y) -1.0)) t_4))
        (t_6
         (fma -1.0 (/ x (/ (- b y) y)) (/ y (/ (pow (- b y) 2.0) (- t a)))))
        (t_7 (+ t_4 (- (/ y (/ (* (- b y) (* z z)) t_6)) (/ t_6 z)))))
   (if (<= t_1 -1e+271)
     t_5
     (if (<= t_1 -4e-225)
       t_3
       (if (<= t_1 0.0)
         t_7
         (if (<= t_1 4e+256) t_3 (if (<= t_1 INFINITY) t_5 t_7)))))))
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 t_1 = ((z * (t - a)) + (x * y)) / (y + (z * (b - y)));
	double t_2 = fma(z, (b - y), y);
	double t_3 = ((x * y) + ((z * t) - (z * a))) / t_2;
	double t_4 = (t - a) / (b - y);
	double t_5 = (x * pow((t_2 / y), -1.0)) + t_4;
	double t_6 = fma(-1.0, (x / ((b - y) / y)), (y / (pow((b - y), 2.0) / (t - a))));
	double t_7 = t_4 + ((y / (((b - y) * (z * z)) / t_6)) - (t_6 / z));
	double tmp;
	if (t_1 <= -1e+271) {
		tmp = t_5;
	} else if (t_1 <= -4e-225) {
		tmp = t_3;
	} else if (t_1 <= 0.0) {
		tmp = t_7;
	} else if (t_1 <= 4e+256) {
		tmp = t_3;
	} else if (t_1 <= ((double) INFINITY)) {
		tmp = t_5;
	} else {
		tmp = t_7;
	}
	return tmp;
}
function code(x, y, z, t, a, b)
	return Float64(Float64(Float64(x * y) + Float64(z * Float64(t - a))) / Float64(y + Float64(z * Float64(b - y))))
end
function code(x, y, z, t, a, b)
	t_1 = Float64(Float64(Float64(z * Float64(t - a)) + Float64(x * y)) / Float64(y + Float64(z * Float64(b - y))))
	t_2 = fma(z, Float64(b - y), y)
	t_3 = Float64(Float64(Float64(x * y) + Float64(Float64(z * t) - Float64(z * a))) / t_2)
	t_4 = Float64(Float64(t - a) / Float64(b - y))
	t_5 = Float64(Float64(x * (Float64(t_2 / y) ^ -1.0)) + t_4)
	t_6 = fma(-1.0, Float64(x / Float64(Float64(b - y) / y)), Float64(y / Float64((Float64(b - y) ^ 2.0) / Float64(t - a))))
	t_7 = Float64(t_4 + Float64(Float64(y / Float64(Float64(Float64(b - y) * Float64(z * z)) / t_6)) - Float64(t_6 / z)))
	tmp = 0.0
	if (t_1 <= -1e+271)
		tmp = t_5;
	elseif (t_1 <= -4e-225)
		tmp = t_3;
	elseif (t_1 <= 0.0)
		tmp = t_7;
	elseif (t_1 <= 4e+256)
		tmp = t_3;
	elseif (t_1 <= Inf)
		tmp = t_5;
	else
		tmp = t_7;
	end
	return tmp
end
code[x_, y_, z_, t_, a_, b_] := N[(N[(N[(x * y), $MachinePrecision] + N[(z * N[(t - a), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(y + N[(z * N[(b - y), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_, t_, a_, b_] := Block[{t$95$1 = N[(N[(N[(z * N[(t - a), $MachinePrecision]), $MachinePrecision] + N[(x * y), $MachinePrecision]), $MachinePrecision] / N[(y + N[(z * N[(b - y), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(z * N[(b - y), $MachinePrecision] + y), $MachinePrecision]}, Block[{t$95$3 = N[(N[(N[(x * y), $MachinePrecision] + N[(N[(z * t), $MachinePrecision] - N[(z * a), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / t$95$2), $MachinePrecision]}, Block[{t$95$4 = N[(N[(t - a), $MachinePrecision] / N[(b - y), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$5 = N[(N[(x * N[Power[N[(t$95$2 / y), $MachinePrecision], -1.0], $MachinePrecision]), $MachinePrecision] + t$95$4), $MachinePrecision]}, Block[{t$95$6 = N[(-1.0 * N[(x / N[(N[(b - y), $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision] + N[(y / N[(N[Power[N[(b - y), $MachinePrecision], 2.0], $MachinePrecision] / N[(t - a), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$7 = N[(t$95$4 + N[(N[(y / N[(N[(N[(b - y), $MachinePrecision] * N[(z * z), $MachinePrecision]), $MachinePrecision] / t$95$6), $MachinePrecision]), $MachinePrecision] - N[(t$95$6 / z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e+271], t$95$5, If[LessEqual[t$95$1, -4e-225], t$95$3, If[LessEqual[t$95$1, 0.0], t$95$7, If[LessEqual[t$95$1, 4e+256], t$95$3, If[LessEqual[t$95$1, Infinity], t$95$5, t$95$7]]]]]]]]]]]]
\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)}
\begin{array}{l}
t_1 := \frac{z \cdot \left(t - a\right) + x \cdot y}{y + z \cdot \left(b - y\right)}\\
t_2 := \mathsf{fma}\left(z, b - y, y\right)\\
t_3 := \frac{x \cdot y + \left(z \cdot t - z \cdot a\right)}{t_2}\\
t_4 := \frac{t - a}{b - y}\\
t_5 := x \cdot {\left(\frac{t_2}{y}\right)}^{-1} + t_4\\
t_6 := \mathsf{fma}\left(-1, \frac{x}{\frac{b - y}{y}}, \frac{y}{\frac{{\left(b - y\right)}^{2}}{t - a}}\right)\\
t_7 := t_4 + \left(\frac{y}{\frac{\left(b - y\right) \cdot \left(z \cdot z\right)}{t_6}} - \frac{t_6}{z}\right)\\
\mathbf{if}\;t_1 \leq -1 \cdot 10^{+271}:\\
\;\;\;\;t_5\\

\mathbf{elif}\;t_1 \leq -4 \cdot 10^{-225}:\\
\;\;\;\;t_3\\

\mathbf{elif}\;t_1 \leq 0:\\
\;\;\;\;t_7\\

\mathbf{elif}\;t_1 \leq 4 \cdot 10^{+256}:\\
\;\;\;\;t_3\\

\mathbf{elif}\;t_1 \leq \infty:\\
\;\;\;\;t_5\\

\mathbf{else}:\\
\;\;\;\;t_7\\


\end{array}

Error

Target

Original23.9
Target18.7
Herbie1.8
\[\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 3 regimes
  2. if (/.f64 (+.f64 (*.f64 x y) (*.f64 z (-.f64 t a))) (+.f64 y (*.f64 z (-.f64 b y)))) < -9.99999999999999953e270 or 4.0000000000000001e256 < (/.f64 (+.f64 (*.f64 x y) (*.f64 z (-.f64 t a))) (+.f64 y (*.f64 z (-.f64 b y)))) < +inf.0

    1. Initial program 54.5

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

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

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

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

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

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

    if -9.99999999999999953e270 < (/.f64 (+.f64 (*.f64 x y) (*.f64 z (-.f64 t a))) (+.f64 y (*.f64 z (-.f64 b y)))) < -3.9999999999999998e-225 or -0.0 < (/.f64 (+.f64 (*.f64 x y) (*.f64 z (-.f64 t a))) (+.f64 y (*.f64 z (-.f64 b y)))) < 4.0000000000000001e256

    1. Initial program 0.3

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

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

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

    if -3.9999999999999998e-225 < (/.f64 (+.f64 (*.f64 x y) (*.f64 z (-.f64 t a))) (+.f64 y (*.f64 z (-.f64 b y)))) < -0.0 or +inf.0 < (/.f64 (+.f64 (*.f64 x y) (*.f64 z (-.f64 t a))) (+.f64 y (*.f64 z (-.f64 b y))))

    1. Initial program 54.3

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

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

      \[\leadsto \color{blue}{\left(\frac{t}{b - y} + \left(-1 \cdot \frac{-1 \cdot \frac{y \cdot x}{b - y} - -1 \cdot \frac{\left(t - a\right) \cdot y}{{\left(b - y\right)}^{2}}}{z} + \frac{\left(-1 \cdot \frac{y \cdot x}{b - y} - -1 \cdot \frac{\left(t - a\right) \cdot y}{{\left(b - y\right)}^{2}}\right) \cdot y}{{z}^{2} \cdot \left(b - y\right)}\right)\right) - \frac{a}{b - y}} \]
    4. Simplified3.9

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{z \cdot \left(t - a\right) + x \cdot y}{y + z \cdot \left(b - y\right)} \leq -1 \cdot 10^{+271}:\\ \;\;\;\;x \cdot {\left(\frac{\mathsf{fma}\left(z, b - y, y\right)}{y}\right)}^{-1} + \frac{t - a}{b - y}\\ \mathbf{elif}\;\frac{z \cdot \left(t - a\right) + x \cdot y}{y + z \cdot \left(b - y\right)} \leq -4 \cdot 10^{-225}:\\ \;\;\;\;\frac{x \cdot y + \left(z \cdot t - z \cdot a\right)}{\mathsf{fma}\left(z, b - y, y\right)}\\ \mathbf{elif}\;\frac{z \cdot \left(t - a\right) + x \cdot y}{y + z \cdot \left(b - y\right)} \leq 0:\\ \;\;\;\;\frac{t - a}{b - y} + \left(\frac{y}{\frac{\left(b - y\right) \cdot \left(z \cdot z\right)}{\mathsf{fma}\left(-1, \frac{x}{\frac{b - y}{y}}, \frac{y}{\frac{{\left(b - y\right)}^{2}}{t - a}}\right)}} - \frac{\mathsf{fma}\left(-1, \frac{x}{\frac{b - y}{y}}, \frac{y}{\frac{{\left(b - y\right)}^{2}}{t - a}}\right)}{z}\right)\\ \mathbf{elif}\;\frac{z \cdot \left(t - a\right) + x \cdot y}{y + z \cdot \left(b - y\right)} \leq 4 \cdot 10^{+256}:\\ \;\;\;\;\frac{x \cdot y + \left(z \cdot t - z \cdot a\right)}{\mathsf{fma}\left(z, b - y, y\right)}\\ \mathbf{elif}\;\frac{z \cdot \left(t - a\right) + x \cdot y}{y + z \cdot \left(b - y\right)} \leq \infty:\\ \;\;\;\;x \cdot {\left(\frac{\mathsf{fma}\left(z, b - y, y\right)}{y}\right)}^{-1} + \frac{t - a}{b - y}\\ \mathbf{else}:\\ \;\;\;\;\frac{t - a}{b - y} + \left(\frac{y}{\frac{\left(b - y\right) \cdot \left(z \cdot z\right)}{\mathsf{fma}\left(-1, \frac{x}{\frac{b - y}{y}}, \frac{y}{\frac{{\left(b - y\right)}^{2}}{t - a}}\right)}} - \frac{\mathsf{fma}\left(-1, \frac{x}{\frac{b - y}{y}}, \frac{y}{\frac{{\left(b - y\right)}^{2}}{t - a}}\right)}{z}\right)\\ \end{array} \]

Reproduce

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