
(FPCore (x y z t a b c) :precision binary64 (+ (- (+ (* x y) (/ (* z t) 16.0)) (/ (* a b) 4.0)) c))
double code(double x, double y, double z, double t, double a, double b, double c) {
return (((x * y) + ((z * t) / 16.0)) - ((a * b) / 4.0)) + c;
}
real(8) function code(x, y, z, t, a, b, c)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8), intent (in) :: c
code = (((x * y) + ((z * t) / 16.0d0)) - ((a * b) / 4.0d0)) + c
end function
public static double code(double x, double y, double z, double t, double a, double b, double c) {
return (((x * y) + ((z * t) / 16.0)) - ((a * b) / 4.0)) + c;
}
def code(x, y, z, t, a, b, c): return (((x * y) + ((z * t) / 16.0)) - ((a * b) / 4.0)) + c
function code(x, y, z, t, a, b, c) return Float64(Float64(Float64(Float64(x * y) + Float64(Float64(z * t) / 16.0)) - Float64(Float64(a * b) / 4.0)) + c) end
function tmp = code(x, y, z, t, a, b, c) tmp = (((x * y) + ((z * t) / 16.0)) - ((a * b) / 4.0)) + c; end
code[x_, y_, z_, t_, a_, b_, c_] := N[(N[(N[(N[(x * y), $MachinePrecision] + N[(N[(z * t), $MachinePrecision] / 16.0), $MachinePrecision]), $MachinePrecision] - N[(N[(a * b), $MachinePrecision] / 4.0), $MachinePrecision]), $MachinePrecision] + c), $MachinePrecision]
\begin{array}{l}
\\
\left(\left(x \cdot y + \frac{z \cdot t}{16}\right) - \frac{a \cdot b}{4}\right) + c
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 14 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y z t a b c) :precision binary64 (+ (- (+ (* x y) (/ (* z t) 16.0)) (/ (* a b) 4.0)) c))
double code(double x, double y, double z, double t, double a, double b, double c) {
return (((x * y) + ((z * t) / 16.0)) - ((a * b) / 4.0)) + c;
}
real(8) function code(x, y, z, t, a, b, c)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8), intent (in) :: c
code = (((x * y) + ((z * t) / 16.0d0)) - ((a * b) / 4.0d0)) + c
end function
public static double code(double x, double y, double z, double t, double a, double b, double c) {
return (((x * y) + ((z * t) / 16.0)) - ((a * b) / 4.0)) + c;
}
def code(x, y, z, t, a, b, c): return (((x * y) + ((z * t) / 16.0)) - ((a * b) / 4.0)) + c
function code(x, y, z, t, a, b, c) return Float64(Float64(Float64(Float64(x * y) + Float64(Float64(z * t) / 16.0)) - Float64(Float64(a * b) / 4.0)) + c) end
function tmp = code(x, y, z, t, a, b, c) tmp = (((x * y) + ((z * t) / 16.0)) - ((a * b) / 4.0)) + c; end
code[x_, y_, z_, t_, a_, b_, c_] := N[(N[(N[(N[(x * y), $MachinePrecision] + N[(N[(z * t), $MachinePrecision] / 16.0), $MachinePrecision]), $MachinePrecision] - N[(N[(a * b), $MachinePrecision] / 4.0), $MachinePrecision]), $MachinePrecision] + c), $MachinePrecision]
\begin{array}{l}
\\
\left(\left(x \cdot y + \frac{z \cdot t}{16}\right) - \frac{a \cdot b}{4}\right) + c
\end{array}
(FPCore (x y z t a b c) :precision binary64 (+ c (fma (* 0.0625 t) z (fma y x (* (* a b) -0.25)))))
double code(double x, double y, double z, double t, double a, double b, double c) {
return c + fma((0.0625 * t), z, fma(y, x, ((a * b) * -0.25)));
}
function code(x, y, z, t, a, b, c) return Float64(c + fma(Float64(0.0625 * t), z, fma(y, x, Float64(Float64(a * b) * -0.25)))) end
code[x_, y_, z_, t_, a_, b_, c_] := N[(c + N[(N[(0.0625 * t), $MachinePrecision] * z + N[(y * x + N[(N[(a * b), $MachinePrecision] * -0.25), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
c + \mathsf{fma}\left(0.0625 \cdot t, z, \mathsf{fma}\left(y, x, \left(a \cdot b\right) \cdot -0.25\right)\right)
\end{array}
Initial program 98.1%
lift--.f64N/A
sub-negN/A
lift-+.f64N/A
+-commutativeN/A
associate-+l+N/A
lift-/.f64N/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-fma.f64N/A
div-invN/A
lower-*.f64N/A
metadata-evalN/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f64N/A
lift-/.f64N/A
div-invN/A
distribute-rgt-neg-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
lower-*.f64N/A
Applied rewrites98.4%
Final simplification98.4%
(FPCore (x y z t a b c) :precision binary64 (let* ((t_1 (fma (* z 0.0625) t (* x y))) (t_2 (+ (/ (* z t) 16.0) (* x y)))) (if (<= t_2 -5e+112) t_1 (if (<= t_2 1e+193) (fma -0.25 (* a b) c) t_1))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double t_1 = fma((z * 0.0625), t, (x * y));
double t_2 = ((z * t) / 16.0) + (x * y);
double tmp;
if (t_2 <= -5e+112) {
tmp = t_1;
} else if (t_2 <= 1e+193) {
tmp = fma(-0.25, (a * b), c);
} else {
tmp = t_1;
}
return tmp;
}
function code(x, y, z, t, a, b, c) t_1 = fma(Float64(z * 0.0625), t, Float64(x * y)) t_2 = Float64(Float64(Float64(z * t) / 16.0) + Float64(x * y)) tmp = 0.0 if (t_2 <= -5e+112) tmp = t_1; elseif (t_2 <= 1e+193) tmp = fma(-0.25, Float64(a * b), c); else tmp = t_1; end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := Block[{t$95$1 = N[(N[(z * 0.0625), $MachinePrecision] * t + N[(x * y), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(N[(z * t), $MachinePrecision] / 16.0), $MachinePrecision] + N[(x * y), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -5e+112], t$95$1, If[LessEqual[t$95$2, 1e+193], N[(-0.25 * N[(a * b), $MachinePrecision] + c), $MachinePrecision], t$95$1]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \mathsf{fma}\left(z \cdot 0.0625, t, x \cdot y\right)\\
t_2 := \frac{z \cdot t}{16} + x \cdot y\\
\mathbf{if}\;t\_2 \leq -5 \cdot 10^{+112}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 10^{+193}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, a \cdot b, c\right)\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (+.f64 (*.f64 x y) (/.f64 (*.f64 z t) #s(literal 16 binary64))) < -5e112 or 1.00000000000000007e193 < (+.f64 (*.f64 x y) (/.f64 (*.f64 z t) #s(literal 16 binary64))) Initial program 96.0%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6490.4
Applied rewrites90.4%
Applied rewrites90.3%
Taylor expanded in c around 0
Applied rewrites83.9%
Applied rewrites84.6%
if -5e112 < (+.f64 (*.f64 x y) (/.f64 (*.f64 z t) #s(literal 16 binary64))) < 1.00000000000000007e193Initial program 100.0%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6489.3
Applied rewrites89.3%
Taylor expanded in x around 0
Applied rewrites76.5%
Final simplification80.3%
(FPCore (x y z t a b c)
:precision binary64
(let* ((t_1 (fma (* z t) 0.0625 c)))
(if (<= (* a b) -2e+73)
(fma -0.25 (* a b) (fma y x c))
(if (<= (* a b) 2e-52)
(fma y x t_1)
(if (<= (* a b) 2e+155)
(fma y x (fma (* -0.25 a) b c))
(fma (* -0.25 a) b t_1))))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double t_1 = fma((z * t), 0.0625, c);
double tmp;
if ((a * b) <= -2e+73) {
tmp = fma(-0.25, (a * b), fma(y, x, c));
} else if ((a * b) <= 2e-52) {
tmp = fma(y, x, t_1);
} else if ((a * b) <= 2e+155) {
tmp = fma(y, x, fma((-0.25 * a), b, c));
} else {
tmp = fma((-0.25 * a), b, t_1);
}
return tmp;
}
function code(x, y, z, t, a, b, c) t_1 = fma(Float64(z * t), 0.0625, c) tmp = 0.0 if (Float64(a * b) <= -2e+73) tmp = fma(-0.25, Float64(a * b), fma(y, x, c)); elseif (Float64(a * b) <= 2e-52) tmp = fma(y, x, t_1); elseif (Float64(a * b) <= 2e+155) tmp = fma(y, x, fma(Float64(-0.25 * a), b, c)); else tmp = fma(Float64(-0.25 * a), b, t_1); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := Block[{t$95$1 = N[(N[(z * t), $MachinePrecision] * 0.0625 + c), $MachinePrecision]}, If[LessEqual[N[(a * b), $MachinePrecision], -2e+73], N[(-0.25 * N[(a * b), $MachinePrecision] + N[(y * x + c), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(a * b), $MachinePrecision], 2e-52], N[(y * x + t$95$1), $MachinePrecision], If[LessEqual[N[(a * b), $MachinePrecision], 2e+155], N[(y * x + N[(N[(-0.25 * a), $MachinePrecision] * b + c), $MachinePrecision]), $MachinePrecision], N[(N[(-0.25 * a), $MachinePrecision] * b + t$95$1), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \mathsf{fma}\left(z \cdot t, 0.0625, c\right)\\
\mathbf{if}\;a \cdot b \leq -2 \cdot 10^{+73}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, a \cdot b, \mathsf{fma}\left(y, x, c\right)\right)\\
\mathbf{elif}\;a \cdot b \leq 2 \cdot 10^{-52}:\\
\;\;\;\;\mathsf{fma}\left(y, x, t\_1\right)\\
\mathbf{elif}\;a \cdot b \leq 2 \cdot 10^{+155}:\\
\;\;\;\;\mathsf{fma}\left(y, x, \mathsf{fma}\left(-0.25 \cdot a, b, c\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25 \cdot a, b, t\_1\right)\\
\end{array}
\end{array}
if (*.f64 a b) < -1.99999999999999997e73Initial program 100.0%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6493.9
Applied rewrites93.9%
if -1.99999999999999997e73 < (*.f64 a b) < 2e-52Initial program 99.3%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6498.7
Applied rewrites98.7%
if 2e-52 < (*.f64 a b) < 2.00000000000000001e155Initial program 99.9%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6488.5
Applied rewrites88.5%
Applied rewrites88.6%
if 2.00000000000000001e155 < (*.f64 a b) Initial program 88.4%
Taylor expanded in x around inf
*-commutativeN/A
lower-*.f647.8
Applied rewrites7.8%
Taylor expanded in x around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
associate-*r*N/A
lower-fma.f64N/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6497.5
Applied rewrites97.5%
Final simplification96.3%
(FPCore (x y z t a b c)
:precision binary64
(let* ((t_1 (fma (* z t) 0.0625 c)))
(if (<= (* a b) -2e+73)
(fma -0.25 (* a b) (fma y x c))
(if (<= (* a b) 2e-52)
(fma y x t_1)
(if (<= (* a b) 2e+155)
(fma y x (fma (* -0.25 a) b c))
(fma -0.25 (* a b) t_1))))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double t_1 = fma((z * t), 0.0625, c);
double tmp;
if ((a * b) <= -2e+73) {
tmp = fma(-0.25, (a * b), fma(y, x, c));
} else if ((a * b) <= 2e-52) {
tmp = fma(y, x, t_1);
} else if ((a * b) <= 2e+155) {
tmp = fma(y, x, fma((-0.25 * a), b, c));
} else {
tmp = fma(-0.25, (a * b), t_1);
}
return tmp;
}
function code(x, y, z, t, a, b, c) t_1 = fma(Float64(z * t), 0.0625, c) tmp = 0.0 if (Float64(a * b) <= -2e+73) tmp = fma(-0.25, Float64(a * b), fma(y, x, c)); elseif (Float64(a * b) <= 2e-52) tmp = fma(y, x, t_1); elseif (Float64(a * b) <= 2e+155) tmp = fma(y, x, fma(Float64(-0.25 * a), b, c)); else tmp = fma(-0.25, Float64(a * b), t_1); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := Block[{t$95$1 = N[(N[(z * t), $MachinePrecision] * 0.0625 + c), $MachinePrecision]}, If[LessEqual[N[(a * b), $MachinePrecision], -2e+73], N[(-0.25 * N[(a * b), $MachinePrecision] + N[(y * x + c), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(a * b), $MachinePrecision], 2e-52], N[(y * x + t$95$1), $MachinePrecision], If[LessEqual[N[(a * b), $MachinePrecision], 2e+155], N[(y * x + N[(N[(-0.25 * a), $MachinePrecision] * b + c), $MachinePrecision]), $MachinePrecision], N[(-0.25 * N[(a * b), $MachinePrecision] + t$95$1), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \mathsf{fma}\left(z \cdot t, 0.0625, c\right)\\
\mathbf{if}\;a \cdot b \leq -2 \cdot 10^{+73}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, a \cdot b, \mathsf{fma}\left(y, x, c\right)\right)\\
\mathbf{elif}\;a \cdot b \leq 2 \cdot 10^{-52}:\\
\;\;\;\;\mathsf{fma}\left(y, x, t\_1\right)\\
\mathbf{elif}\;a \cdot b \leq 2 \cdot 10^{+155}:\\
\;\;\;\;\mathsf{fma}\left(y, x, \mathsf{fma}\left(-0.25 \cdot a, b, c\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, a \cdot b, t\_1\right)\\
\end{array}
\end{array}
if (*.f64 a b) < -1.99999999999999997e73Initial program 100.0%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6493.9
Applied rewrites93.9%
if -1.99999999999999997e73 < (*.f64 a b) < 2e-52Initial program 99.3%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6498.7
Applied rewrites98.7%
if 2e-52 < (*.f64 a b) < 2.00000000000000001e155Initial program 99.9%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6488.5
Applied rewrites88.5%
Applied rewrites88.6%
if 2.00000000000000001e155 < (*.f64 a b) Initial program 88.4%
Taylor expanded in x around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6488.4
Applied rewrites88.4%
Final simplification95.1%
(FPCore (x y z t a b c)
:precision binary64
(let* ((t_1 (fma -0.25 (* a b) c)))
(if (<= (* a b) -2e+73)
t_1
(if (<= (* a b) 4e-178)
(fma (* z 0.0625) t c)
(if (<= (* a b) 2e+70) (fma y x c) t_1)))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double t_1 = fma(-0.25, (a * b), c);
double tmp;
if ((a * b) <= -2e+73) {
tmp = t_1;
} else if ((a * b) <= 4e-178) {
tmp = fma((z * 0.0625), t, c);
} else if ((a * b) <= 2e+70) {
tmp = fma(y, x, c);
} else {
tmp = t_1;
}
return tmp;
}
function code(x, y, z, t, a, b, c) t_1 = fma(-0.25, Float64(a * b), c) tmp = 0.0 if (Float64(a * b) <= -2e+73) tmp = t_1; elseif (Float64(a * b) <= 4e-178) tmp = fma(Float64(z * 0.0625), t, c); elseif (Float64(a * b) <= 2e+70) tmp = fma(y, x, c); else tmp = t_1; end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := Block[{t$95$1 = N[(-0.25 * N[(a * b), $MachinePrecision] + c), $MachinePrecision]}, If[LessEqual[N[(a * b), $MachinePrecision], -2e+73], t$95$1, If[LessEqual[N[(a * b), $MachinePrecision], 4e-178], N[(N[(z * 0.0625), $MachinePrecision] * t + c), $MachinePrecision], If[LessEqual[N[(a * b), $MachinePrecision], 2e+70], N[(y * x + c), $MachinePrecision], t$95$1]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \mathsf{fma}\left(-0.25, a \cdot b, c\right)\\
\mathbf{if}\;a \cdot b \leq -2 \cdot 10^{+73}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;a \cdot b \leq 4 \cdot 10^{-178}:\\
\;\;\;\;\mathsf{fma}\left(z \cdot 0.0625, t, c\right)\\
\mathbf{elif}\;a \cdot b \leq 2 \cdot 10^{+70}:\\
\;\;\;\;\mathsf{fma}\left(y, x, c\right)\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (*.f64 a b) < -1.99999999999999997e73 or 2.00000000000000015e70 < (*.f64 a b) Initial program 95.9%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6487.4
Applied rewrites87.4%
Taylor expanded in x around 0
Applied rewrites74.6%
if -1.99999999999999997e73 < (*.f64 a b) < 3.9999999999999998e-178Initial program 99.1%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6499.1
Applied rewrites99.1%
Taylor expanded in x around 0
Applied rewrites72.7%
Applied rewrites72.7%
if 3.9999999999999998e-178 < (*.f64 a b) < 2.00000000000000015e70Initial program 99.9%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6489.8
Applied rewrites89.8%
Taylor expanded in x around 0
Applied rewrites50.7%
Applied rewrites50.7%
Taylor expanded in z around 0
Applied rewrites67.7%
Final simplification72.4%
(FPCore (x y z t a b c)
:precision binary64
(if (<= (* a b) -2e+73)
(fma -0.25 (* a b) (fma y x c))
(if (<= (* a b) 2e-52)
(fma y x (fma (* z t) 0.0625 c))
(fma y x (fma (* -0.25 a) b c)))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double tmp;
if ((a * b) <= -2e+73) {
tmp = fma(-0.25, (a * b), fma(y, x, c));
} else if ((a * b) <= 2e-52) {
tmp = fma(y, x, fma((z * t), 0.0625, c));
} else {
tmp = fma(y, x, fma((-0.25 * a), b, c));
}
return tmp;
}
function code(x, y, z, t, a, b, c) tmp = 0.0 if (Float64(a * b) <= -2e+73) tmp = fma(-0.25, Float64(a * b), fma(y, x, c)); elseif (Float64(a * b) <= 2e-52) tmp = fma(y, x, fma(Float64(z * t), 0.0625, c)); else tmp = fma(y, x, fma(Float64(-0.25 * a), b, c)); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := If[LessEqual[N[(a * b), $MachinePrecision], -2e+73], N[(-0.25 * N[(a * b), $MachinePrecision] + N[(y * x + c), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(a * b), $MachinePrecision], 2e-52], N[(y * x + N[(N[(z * t), $MachinePrecision] * 0.0625 + c), $MachinePrecision]), $MachinePrecision], N[(y * x + N[(N[(-0.25 * a), $MachinePrecision] * b + c), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;a \cdot b \leq -2 \cdot 10^{+73}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, a \cdot b, \mathsf{fma}\left(y, x, c\right)\right)\\
\mathbf{elif}\;a \cdot b \leq 2 \cdot 10^{-52}:\\
\;\;\;\;\mathsf{fma}\left(y, x, \mathsf{fma}\left(z \cdot t, 0.0625, c\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, x, \mathsf{fma}\left(-0.25 \cdot a, b, c\right)\right)\\
\end{array}
\end{array}
if (*.f64 a b) < -1.99999999999999997e73Initial program 100.0%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6493.9
Applied rewrites93.9%
if -1.99999999999999997e73 < (*.f64 a b) < 2e-52Initial program 99.3%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6498.7
Applied rewrites98.7%
if 2e-52 < (*.f64 a b) Initial program 94.3%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6482.5
Applied rewrites82.5%
Applied rewrites82.5%
Final simplification93.5%
(FPCore (x y z t a b c)
:precision binary64
(if (<= (* z t) -5e+193)
(fma (* z 0.0625) t c)
(if (<= (* z t) 5e+227)
(fma y x (fma (* -0.25 a) b c))
(fma (* z 0.0625) t (* x y)))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double tmp;
if ((z * t) <= -5e+193) {
tmp = fma((z * 0.0625), t, c);
} else if ((z * t) <= 5e+227) {
tmp = fma(y, x, fma((-0.25 * a), b, c));
} else {
tmp = fma((z * 0.0625), t, (x * y));
}
return tmp;
}
function code(x, y, z, t, a, b, c) tmp = 0.0 if (Float64(z * t) <= -5e+193) tmp = fma(Float64(z * 0.0625), t, c); elseif (Float64(z * t) <= 5e+227) tmp = fma(y, x, fma(Float64(-0.25 * a), b, c)); else tmp = fma(Float64(z * 0.0625), t, Float64(x * y)); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := If[LessEqual[N[(z * t), $MachinePrecision], -5e+193], N[(N[(z * 0.0625), $MachinePrecision] * t + c), $MachinePrecision], If[LessEqual[N[(z * t), $MachinePrecision], 5e+227], N[(y * x + N[(N[(-0.25 * a), $MachinePrecision] * b + c), $MachinePrecision]), $MachinePrecision], N[(N[(z * 0.0625), $MachinePrecision] * t + N[(x * y), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;z \cdot t \leq -5 \cdot 10^{+193}:\\
\;\;\;\;\mathsf{fma}\left(z \cdot 0.0625, t, c\right)\\
\mathbf{elif}\;z \cdot t \leq 5 \cdot 10^{+227}:\\
\;\;\;\;\mathsf{fma}\left(y, x, \mathsf{fma}\left(-0.25 \cdot a, b, c\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(z \cdot 0.0625, t, x \cdot y\right)\\
\end{array}
\end{array}
if (*.f64 z t) < -4.99999999999999972e193Initial program 100.0%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6496.8
Applied rewrites96.8%
Taylor expanded in x around 0
Applied rewrites96.7%
Applied rewrites96.7%
if -4.99999999999999972e193 < (*.f64 z t) < 4.9999999999999996e227Initial program 100.0%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6490.7
Applied rewrites90.7%
Applied rewrites90.8%
if 4.9999999999999996e227 < (*.f64 z t) Initial program 80.7%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6489.2
Applied rewrites89.2%
Applied rewrites88.4%
Taylor expanded in c around 0
Applied rewrites85.2%
Applied rewrites88.4%
Final simplification91.3%
(FPCore (x y z t a b c)
:precision binary64
(if (<= (* z t) -5e+193)
(fma (* z 0.0625) t c)
(if (<= (* z t) 5e+227)
(fma -0.25 (* a b) (fma y x c))
(fma (* z 0.0625) t (* x y)))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double tmp;
if ((z * t) <= -5e+193) {
tmp = fma((z * 0.0625), t, c);
} else if ((z * t) <= 5e+227) {
tmp = fma(-0.25, (a * b), fma(y, x, c));
} else {
tmp = fma((z * 0.0625), t, (x * y));
}
return tmp;
}
function code(x, y, z, t, a, b, c) tmp = 0.0 if (Float64(z * t) <= -5e+193) tmp = fma(Float64(z * 0.0625), t, c); elseif (Float64(z * t) <= 5e+227) tmp = fma(-0.25, Float64(a * b), fma(y, x, c)); else tmp = fma(Float64(z * 0.0625), t, Float64(x * y)); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := If[LessEqual[N[(z * t), $MachinePrecision], -5e+193], N[(N[(z * 0.0625), $MachinePrecision] * t + c), $MachinePrecision], If[LessEqual[N[(z * t), $MachinePrecision], 5e+227], N[(-0.25 * N[(a * b), $MachinePrecision] + N[(y * x + c), $MachinePrecision]), $MachinePrecision], N[(N[(z * 0.0625), $MachinePrecision] * t + N[(x * y), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;z \cdot t \leq -5 \cdot 10^{+193}:\\
\;\;\;\;\mathsf{fma}\left(z \cdot 0.0625, t, c\right)\\
\mathbf{elif}\;z \cdot t \leq 5 \cdot 10^{+227}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, a \cdot b, \mathsf{fma}\left(y, x, c\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(z \cdot 0.0625, t, x \cdot y\right)\\
\end{array}
\end{array}
if (*.f64 z t) < -4.99999999999999972e193Initial program 100.0%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6496.8
Applied rewrites96.8%
Taylor expanded in x around 0
Applied rewrites96.7%
Applied rewrites96.7%
if -4.99999999999999972e193 < (*.f64 z t) < 4.9999999999999996e227Initial program 100.0%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6490.7
Applied rewrites90.7%
if 4.9999999999999996e227 < (*.f64 z t) Initial program 80.7%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6489.2
Applied rewrites89.2%
Applied rewrites88.4%
Taylor expanded in c around 0
Applied rewrites85.2%
Applied rewrites88.4%
Final simplification91.3%
(FPCore (x y z t a b c) :precision binary64 (if (<= (* a b) -2e+81) (fma -0.25 (* a b) (* x y)) (if (<= (* a b) 2e-58) (fma (* z 0.0625) t c) (fma y x (* (* -0.25 a) b)))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double tmp;
if ((a * b) <= -2e+81) {
tmp = fma(-0.25, (a * b), (x * y));
} else if ((a * b) <= 2e-58) {
tmp = fma((z * 0.0625), t, c);
} else {
tmp = fma(y, x, ((-0.25 * a) * b));
}
return tmp;
}
function code(x, y, z, t, a, b, c) tmp = 0.0 if (Float64(a * b) <= -2e+81) tmp = fma(-0.25, Float64(a * b), Float64(x * y)); elseif (Float64(a * b) <= 2e-58) tmp = fma(Float64(z * 0.0625), t, c); else tmp = fma(y, x, Float64(Float64(-0.25 * a) * b)); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := If[LessEqual[N[(a * b), $MachinePrecision], -2e+81], N[(-0.25 * N[(a * b), $MachinePrecision] + N[(x * y), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(a * b), $MachinePrecision], 2e-58], N[(N[(z * 0.0625), $MachinePrecision] * t + c), $MachinePrecision], N[(y * x + N[(N[(-0.25 * a), $MachinePrecision] * b), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;a \cdot b \leq -2 \cdot 10^{+81}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, a \cdot b, x \cdot y\right)\\
\mathbf{elif}\;a \cdot b \leq 2 \cdot 10^{-58}:\\
\;\;\;\;\mathsf{fma}\left(z \cdot 0.0625, t, c\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, x, \left(-0.25 \cdot a\right) \cdot b\right)\\
\end{array}
\end{array}
if (*.f64 a b) < -1.99999999999999984e81Initial program 100.0%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6495.7
Applied rewrites95.7%
Taylor expanded in x around 0
Applied rewrites77.4%
Taylor expanded in c around 0
Applied rewrites81.2%
if -1.99999999999999984e81 < (*.f64 a b) < 2.0000000000000001e-58Initial program 99.3%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6498.0
Applied rewrites98.0%
Taylor expanded in x around 0
Applied rewrites70.2%
Applied rewrites70.3%
if 2.0000000000000001e-58 < (*.f64 a b) Initial program 94.6%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6480.7
Applied rewrites80.7%
Taylor expanded in x around 0
Applied rewrites59.3%
Taylor expanded in c around 0
Applied rewrites70.2%
Applied rewrites70.3%
Final simplification72.2%
(FPCore (x y z t a b c)
:precision binary64
(let* ((t_1 (fma -0.25 (* a b) (* x y))))
(if (<= (* a b) -2e+81)
t_1
(if (<= (* a b) 2e-58) (fma (* z 0.0625) t c) t_1))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double t_1 = fma(-0.25, (a * b), (x * y));
double tmp;
if ((a * b) <= -2e+81) {
tmp = t_1;
} else if ((a * b) <= 2e-58) {
tmp = fma((z * 0.0625), t, c);
} else {
tmp = t_1;
}
return tmp;
}
function code(x, y, z, t, a, b, c) t_1 = fma(-0.25, Float64(a * b), Float64(x * y)) tmp = 0.0 if (Float64(a * b) <= -2e+81) tmp = t_1; elseif (Float64(a * b) <= 2e-58) tmp = fma(Float64(z * 0.0625), t, c); else tmp = t_1; end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := Block[{t$95$1 = N[(-0.25 * N[(a * b), $MachinePrecision] + N[(x * y), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[N[(a * b), $MachinePrecision], -2e+81], t$95$1, If[LessEqual[N[(a * b), $MachinePrecision], 2e-58], N[(N[(z * 0.0625), $MachinePrecision] * t + c), $MachinePrecision], t$95$1]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \mathsf{fma}\left(-0.25, a \cdot b, x \cdot y\right)\\
\mathbf{if}\;a \cdot b \leq -2 \cdot 10^{+81}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;a \cdot b \leq 2 \cdot 10^{-58}:\\
\;\;\;\;\mathsf{fma}\left(z \cdot 0.0625, t, c\right)\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (*.f64 a b) < -1.99999999999999984e81 or 2.0000000000000001e-58 < (*.f64 a b) Initial program 96.7%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6486.4
Applied rewrites86.4%
Taylor expanded in x around 0
Applied rewrites66.2%
Taylor expanded in c around 0
Applied rewrites74.4%
if -1.99999999999999984e81 < (*.f64 a b) < 2.0000000000000001e-58Initial program 99.3%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6498.0
Applied rewrites98.0%
Taylor expanded in x around 0
Applied rewrites70.2%
Applied rewrites70.3%
Final simplification72.1%
(FPCore (x y z t a b c) :precision binary64 (if (<= (* x y) -2e+65) (fma y x c) (if (<= (* x y) 5e+74) (fma -0.25 (* a b) c) (fma y x c))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double tmp;
if ((x * y) <= -2e+65) {
tmp = fma(y, x, c);
} else if ((x * y) <= 5e+74) {
tmp = fma(-0.25, (a * b), c);
} else {
tmp = fma(y, x, c);
}
return tmp;
}
function code(x, y, z, t, a, b, c) tmp = 0.0 if (Float64(x * y) <= -2e+65) tmp = fma(y, x, c); elseif (Float64(x * y) <= 5e+74) tmp = fma(-0.25, Float64(a * b), c); else tmp = fma(y, x, c); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := If[LessEqual[N[(x * y), $MachinePrecision], -2e+65], N[(y * x + c), $MachinePrecision], If[LessEqual[N[(x * y), $MachinePrecision], 5e+74], N[(-0.25 * N[(a * b), $MachinePrecision] + c), $MachinePrecision], N[(y * x + c), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;x \cdot y \leq -2 \cdot 10^{+65}:\\
\;\;\;\;\mathsf{fma}\left(y, x, c\right)\\
\mathbf{elif}\;x \cdot y \leq 5 \cdot 10^{+74}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, a \cdot b, c\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, x, c\right)\\
\end{array}
\end{array}
if (*.f64 x y) < -2e65 or 4.99999999999999963e74 < (*.f64 x y) Initial program 97.8%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6492.5
Applied rewrites92.5%
Taylor expanded in x around 0
Applied rewrites32.3%
Applied rewrites32.3%
Taylor expanded in z around 0
Applied rewrites76.7%
if -2e65 < (*.f64 x y) < 4.99999999999999963e74Initial program 98.3%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6469.7
Applied rewrites69.7%
Taylor expanded in x around 0
Applied rewrites64.3%
(FPCore (x y z t a b c) :precision binary64 (let* ((t_1 (* (* 0.0625 t) z))) (if (<= (* z t) -5e+143) t_1 (if (<= (* z t) 2e+194) (fma y x c) t_1))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double t_1 = (0.0625 * t) * z;
double tmp;
if ((z * t) <= -5e+143) {
tmp = t_1;
} else if ((z * t) <= 2e+194) {
tmp = fma(y, x, c);
} else {
tmp = t_1;
}
return tmp;
}
function code(x, y, z, t, a, b, c) t_1 = Float64(Float64(0.0625 * t) * z) tmp = 0.0 if (Float64(z * t) <= -5e+143) tmp = t_1; elseif (Float64(z * t) <= 2e+194) tmp = fma(y, x, c); else tmp = t_1; end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := Block[{t$95$1 = N[(N[(0.0625 * t), $MachinePrecision] * z), $MachinePrecision]}, If[LessEqual[N[(z * t), $MachinePrecision], -5e+143], t$95$1, If[LessEqual[N[(z * t), $MachinePrecision], 2e+194], N[(y * x + c), $MachinePrecision], t$95$1]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \left(0.0625 \cdot t\right) \cdot z\\
\mathbf{if}\;z \cdot t \leq -5 \cdot 10^{+143}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;z \cdot t \leq 2 \cdot 10^{+194}:\\
\;\;\;\;\mathsf{fma}\left(y, x, c\right)\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (*.f64 z t) < -5.00000000000000012e143 or 1.99999999999999989e194 < (*.f64 z t) Initial program 93.2%
lift--.f64N/A
sub-negN/A
lift-+.f64N/A
+-commutativeN/A
associate-+l+N/A
lift-/.f64N/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lower-fma.f64N/A
div-invN/A
lower-*.f64N/A
metadata-evalN/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f64N/A
lift-/.f64N/A
div-invN/A
distribute-rgt-neg-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
lower-*.f64N/A
Applied rewrites94.4%
Taylor expanded in z around inf
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6476.5
Applied rewrites76.5%
Applied rewrites77.6%
if -5.00000000000000012e143 < (*.f64 z t) < 1.99999999999999989e194Initial program 100.0%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6472.0
Applied rewrites72.0%
Taylor expanded in x around 0
Applied rewrites39.9%
Applied rewrites39.9%
Taylor expanded in z around 0
Applied rewrites64.1%
(FPCore (x y z t a b c) :precision binary64 (fma y x c))
double code(double x, double y, double z, double t, double a, double b, double c) {
return fma(y, x, c);
}
function code(x, y, z, t, a, b, c) return fma(y, x, c) end
code[x_, y_, z_, t_, a_, b_, c_] := N[(y * x + c), $MachinePrecision]
\begin{array}{l}
\\
\mathsf{fma}\left(y, x, c\right)
\end{array}
Initial program 98.1%
Taylor expanded in a around 0
associate-+r+N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-*.f6476.0
Applied rewrites76.0%
Taylor expanded in x around 0
Applied rewrites51.3%
Applied rewrites51.6%
Taylor expanded in z around 0
Applied rewrites50.4%
(FPCore (x y z t a b c) :precision binary64 (* x y))
double code(double x, double y, double z, double t, double a, double b, double c) {
return x * y;
}
real(8) function code(x, y, z, t, a, b, c)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8), intent (in) :: c
code = x * y
end function
public static double code(double x, double y, double z, double t, double a, double b, double c) {
return x * y;
}
def code(x, y, z, t, a, b, c): return x * y
function code(x, y, z, t, a, b, c) return Float64(x * y) end
function tmp = code(x, y, z, t, a, b, c) tmp = x * y; end
code[x_, y_, z_, t_, a_, b_, c_] := N[(x * y), $MachinePrecision]
\begin{array}{l}
\\
x \cdot y
\end{array}
Initial program 98.1%
Taylor expanded in x around inf
*-commutativeN/A
lower-*.f6427.8
Applied rewrites27.8%
Final simplification27.8%
herbie shell --seed 2024294
(FPCore (x y z t a b c)
:name "Diagrams.Solve.Polynomial:quartForm from diagrams-solve-0.1, C"
:precision binary64
(+ (- (+ (* x y) (/ (* z t) 16.0)) (/ (* a b) 4.0)) c))