(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}
| Original | 23.9 |
|---|---|
| Target | 18.7 |
| Herbie | 1.8 |
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.0Initial program 54.5
Simplified54.5
Taylor expanded in t around 0 54.5
Simplified4.7
Taylor expanded in z around inf 3.7
Applied egg-rr3.7
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.0000000000000001e256Initial program 0.3
Simplified0.3
Taylor expanded in t around 0 0.3
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)))) Initial program 54.3
Simplified54.3
Taylor expanded in z around -inf 28.8
Simplified3.9
Final simplification1.8
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)))))