
(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 (+ (- (+ (* 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}
Initial program 98.1%
(FPCore (x y z t a b c)
:precision binary64
(let* ((t_1 (+ (* x y) (/ (* z t) 16.0))))
(if (or (<= t_1 -5e+154) (not (<= t_1 2e+104)))
(fma (* t z) 0.0625 (* x y))
(fma -0.25 (* a b) c))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double t_1 = (x * y) + ((z * t) / 16.0);
double tmp;
if ((t_1 <= -5e+154) || !(t_1 <= 2e+104)) {
tmp = fma((t * z), 0.0625, (x * y));
} else {
tmp = fma(-0.25, (a * b), c);
}
return tmp;
}
function code(x, y, z, t, a, b, c) t_1 = Float64(Float64(x * y) + Float64(Float64(z * t) / 16.0)) tmp = 0.0 if ((t_1 <= -5e+154) || !(t_1 <= 2e+104)) tmp = fma(Float64(t * z), 0.0625, Float64(x * y)); else tmp = fma(-0.25, Float64(a * b), c); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := Block[{t$95$1 = N[(N[(x * y), $MachinePrecision] + N[(N[(z * t), $MachinePrecision] / 16.0), $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[t$95$1, -5e+154], N[Not[LessEqual[t$95$1, 2e+104]], $MachinePrecision]], N[(N[(t * z), $MachinePrecision] * 0.0625 + N[(x * y), $MachinePrecision]), $MachinePrecision], N[(-0.25 * N[(a * b), $MachinePrecision] + c), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := x \cdot y + \frac{z \cdot t}{16}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{+154} \lor \neg \left(t\_1 \leq 2 \cdot 10^{+104}\right):\\
\;\;\;\;\mathsf{fma}\left(t \cdot z, 0.0625, x \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, a \cdot b, c\right)\\
\end{array}
\end{array}
if (+.f64 (*.f64 x y) (/.f64 (*.f64 z t) #s(literal 16 binary64))) < -5.00000000000000004e154 or 2e104 < (+.f64 (*.f64 x y) (/.f64 (*.f64 z t) #s(literal 16 binary64))) Initial program 96.5%
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-*.f6493.3
Applied rewrites93.3%
Taylor expanded in c around 0
Applied rewrites84.2%
if -5.00000000000000004e154 < (+.f64 (*.f64 x y) (/.f64 (*.f64 z t) #s(literal 16 binary64))) < 2e104Initial program 100.0%
Taylor expanded in z around 0
fp-cancel-sub-sign-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6491.7
Applied rewrites91.7%
Taylor expanded in x around 0
Applied rewrites87.3%
Final simplification85.6%
(FPCore (x y z t a b c)
:precision binary64
(let* ((t_1 (/ (* z t) 16.0)))
(if (or (<= t_1 -1e+118) (not (<= t_1 2e+68)))
(fma y x (fma (* t z) 0.0625 c))
(fma -0.25 (* b a) (fma y x c)))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double t_1 = (z * t) / 16.0;
double tmp;
if ((t_1 <= -1e+118) || !(t_1 <= 2e+68)) {
tmp = fma(y, x, fma((t * z), 0.0625, c));
} else {
tmp = fma(-0.25, (b * a), fma(y, x, c));
}
return tmp;
}
function code(x, y, z, t, a, b, c) t_1 = Float64(Float64(z * t) / 16.0) tmp = 0.0 if ((t_1 <= -1e+118) || !(t_1 <= 2e+68)) tmp = fma(y, x, fma(Float64(t * z), 0.0625, c)); else tmp = fma(-0.25, Float64(b * a), fma(y, x, c)); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := Block[{t$95$1 = N[(N[(z * t), $MachinePrecision] / 16.0), $MachinePrecision]}, If[Or[LessEqual[t$95$1, -1e+118], N[Not[LessEqual[t$95$1, 2e+68]], $MachinePrecision]], N[(y * x + N[(N[(t * z), $MachinePrecision] * 0.0625 + c), $MachinePrecision]), $MachinePrecision], N[(-0.25 * N[(b * a), $MachinePrecision] + N[(y * x + c), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \frac{z \cdot t}{16}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{+118} \lor \neg \left(t\_1 \leq 2 \cdot 10^{+68}\right):\\
\;\;\;\;\mathsf{fma}\left(y, x, \mathsf{fma}\left(t \cdot z, 0.0625, c\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, b \cdot a, \mathsf{fma}\left(y, x, c\right)\right)\\
\end{array}
\end{array}
if (/.f64 (*.f64 z t) #s(literal 16 binary64)) < -9.99999999999999967e117 or 1.99999999999999991e68 < (/.f64 (*.f64 z t) #s(literal 16 binary64)) Initial program 95.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-*.f6491.6
Applied rewrites91.6%
if -9.99999999999999967e117 < (/.f64 (*.f64 z t) #s(literal 16 binary64)) < 1.99999999999999991e68Initial program 99.4%
Taylor expanded in z around 0
fp-cancel-sub-sign-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6495.4
Applied rewrites95.4%
Final simplification94.1%
(FPCore (x y z t a b c)
:precision binary64
(let* ((t_1 (/ (* z t) 16.0)))
(if (<= t_1 -5e+143)
(fma (* 0.0625 z) t (* (* b a) -0.25))
(if (<= t_1 2e+68)
(fma -0.25 (* b a) (fma y x c))
(fma y x (fma (* t z) 0.0625 c))))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double t_1 = (z * t) / 16.0;
double tmp;
if (t_1 <= -5e+143) {
tmp = fma((0.0625 * z), t, ((b * a) * -0.25));
} else if (t_1 <= 2e+68) {
tmp = fma(-0.25, (b * a), fma(y, x, c));
} else {
tmp = fma(y, x, fma((t * z), 0.0625, c));
}
return tmp;
}
function code(x, y, z, t, a, b, c) t_1 = Float64(Float64(z * t) / 16.0) tmp = 0.0 if (t_1 <= -5e+143) tmp = fma(Float64(0.0625 * z), t, Float64(Float64(b * a) * -0.25)); elseif (t_1 <= 2e+68) tmp = fma(-0.25, Float64(b * a), fma(y, x, c)); else tmp = fma(y, x, fma(Float64(t * z), 0.0625, c)); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := Block[{t$95$1 = N[(N[(z * t), $MachinePrecision] / 16.0), $MachinePrecision]}, If[LessEqual[t$95$1, -5e+143], N[(N[(0.0625 * z), $MachinePrecision] * t + N[(N[(b * a), $MachinePrecision] * -0.25), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 2e+68], N[(-0.25 * N[(b * a), $MachinePrecision] + N[(y * x + c), $MachinePrecision]), $MachinePrecision], N[(y * x + N[(N[(t * z), $MachinePrecision] * 0.0625 + c), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \frac{z \cdot t}{16}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{+143}:\\
\;\;\;\;\mathsf{fma}\left(0.0625 \cdot z, t, \left(b \cdot a\right) \cdot -0.25\right)\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{+68}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, b \cdot a, \mathsf{fma}\left(y, x, c\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, x, \mathsf{fma}\left(t \cdot z, 0.0625, c\right)\right)\\
\end{array}
\end{array}
if (/.f64 (*.f64 z t) #s(literal 16 binary64)) < -5.00000000000000012e143Initial program 93.7%
Taylor expanded in x around 0
fp-cancel-sub-sign-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-*.f6493.7
Applied rewrites93.7%
Taylor expanded in c around 0
Applied rewrites90.4%
Applied rewrites93.3%
if -5.00000000000000012e143 < (/.f64 (*.f64 z t) #s(literal 16 binary64)) < 1.99999999999999991e68Initial program 99.4%
Taylor expanded in z around 0
fp-cancel-sub-sign-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6494.8
Applied rewrites94.8%
if 1.99999999999999991e68 < (/.f64 (*.f64 z t) #s(literal 16 binary64)) Initial program 96.6%
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-*.f6493.5
Applied rewrites93.5%
(FPCore (x y z t a b c)
:precision binary64
(let* ((t_1 (/ (* z t) 16.0)))
(if (<= t_1 -2e+183)
(* (* 0.0625 z) t)
(if (<= t_1 2e+104)
(fma -0.25 (* b a) (fma y x c))
(fma (* t z) 0.0625 (* x y))))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double t_1 = (z * t) / 16.0;
double tmp;
if (t_1 <= -2e+183) {
tmp = (0.0625 * z) * t;
} else if (t_1 <= 2e+104) {
tmp = fma(-0.25, (b * a), fma(y, x, c));
} else {
tmp = fma((t * z), 0.0625, (x * y));
}
return tmp;
}
function code(x, y, z, t, a, b, c) t_1 = Float64(Float64(z * t) / 16.0) tmp = 0.0 if (t_1 <= -2e+183) tmp = Float64(Float64(0.0625 * z) * t); elseif (t_1 <= 2e+104) tmp = fma(-0.25, Float64(b * a), fma(y, x, c)); else tmp = fma(Float64(t * z), 0.0625, Float64(x * y)); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := Block[{t$95$1 = N[(N[(z * t), $MachinePrecision] / 16.0), $MachinePrecision]}, If[LessEqual[t$95$1, -2e+183], N[(N[(0.0625 * z), $MachinePrecision] * t), $MachinePrecision], If[LessEqual[t$95$1, 2e+104], N[(-0.25 * N[(b * a), $MachinePrecision] + N[(y * x + c), $MachinePrecision]), $MachinePrecision], N[(N[(t * z), $MachinePrecision] * 0.0625 + N[(x * y), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \frac{z \cdot t}{16}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{+183}:\\
\;\;\;\;\left(0.0625 \cdot z\right) \cdot t\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{+104}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, b \cdot a, \mathsf{fma}\left(y, x, c\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(t \cdot z, 0.0625, x \cdot y\right)\\
\end{array}
\end{array}
if (/.f64 (*.f64 z t) #s(literal 16 binary64)) < -1.99999999999999989e183Initial program 92.3%
Taylor expanded in t around inf
*-commutativeN/A
lower-*.f64N/A
Applied rewrites95.8%
Taylor expanded in z around inf
Applied rewrites95.8%
if -1.99999999999999989e183 < (/.f64 (*.f64 z t) #s(literal 16 binary64)) < 2e104Initial program 99.4%
Taylor expanded in z around 0
fp-cancel-sub-sign-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6493.6
Applied rewrites93.6%
if 2e104 < (/.f64 (*.f64 z t) #s(literal 16 binary64)) Initial program 96.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-*.f6494.3
Applied rewrites94.3%
Taylor expanded in c around 0
Applied rewrites83.0%
(FPCore (x y z t a b c)
:precision binary64
(let* ((t_1 (fma (* t z) 0.0625 c)))
(if (<= (* x y) -2e+154)
(fma -0.25 (* a b) (* x y))
(if (<= (* x y) -1e-19)
t_1
(if (<= (* x y) -4e-263)
(fma -0.25 (* a b) c)
(if (<= (* x y) 5e+104) t_1 (fma y x c)))))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double t_1 = fma((t * z), 0.0625, c);
double tmp;
if ((x * y) <= -2e+154) {
tmp = fma(-0.25, (a * b), (x * y));
} else if ((x * y) <= -1e-19) {
tmp = t_1;
} else if ((x * y) <= -4e-263) {
tmp = fma(-0.25, (a * b), c);
} else if ((x * y) <= 5e+104) {
tmp = t_1;
} else {
tmp = fma(y, x, c);
}
return tmp;
}
function code(x, y, z, t, a, b, c) t_1 = fma(Float64(t * z), 0.0625, c) tmp = 0.0 if (Float64(x * y) <= -2e+154) tmp = fma(-0.25, Float64(a * b), Float64(x * y)); elseif (Float64(x * y) <= -1e-19) tmp = t_1; elseif (Float64(x * y) <= -4e-263) tmp = fma(-0.25, Float64(a * b), c); elseif (Float64(x * y) <= 5e+104) tmp = t_1; else tmp = fma(y, x, c); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := Block[{t$95$1 = N[(N[(t * z), $MachinePrecision] * 0.0625 + c), $MachinePrecision]}, If[LessEqual[N[(x * y), $MachinePrecision], -2e+154], N[(-0.25 * N[(a * b), $MachinePrecision] + N[(x * y), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(x * y), $MachinePrecision], -1e-19], t$95$1, If[LessEqual[N[(x * y), $MachinePrecision], -4e-263], N[(-0.25 * N[(a * b), $MachinePrecision] + c), $MachinePrecision], If[LessEqual[N[(x * y), $MachinePrecision], 5e+104], t$95$1, N[(y * x + c), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \mathsf{fma}\left(t \cdot z, 0.0625, c\right)\\
\mathbf{if}\;x \cdot y \leq -2 \cdot 10^{+154}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, a \cdot b, x \cdot y\right)\\
\mathbf{elif}\;x \cdot y \leq -1 \cdot 10^{-19}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;x \cdot y \leq -4 \cdot 10^{-263}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, a \cdot b, c\right)\\
\mathbf{elif}\;x \cdot y \leq 5 \cdot 10^{+104}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, x, c\right)\\
\end{array}
\end{array}
if (*.f64 x y) < -2.00000000000000007e154Initial program 94.4%
Taylor expanded in z around 0
fp-cancel-sub-sign-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 c around 0
Applied rewrites89.2%
if -2.00000000000000007e154 < (*.f64 x y) < -9.9999999999999998e-20 or -4e-263 < (*.f64 x y) < 4.9999999999999997e104Initial program 99.4%
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-*.f6474.0
Applied rewrites74.0%
Taylor expanded in x around 0
Applied rewrites71.3%
if -9.9999999999999998e-20 < (*.f64 x y) < -4e-263Initial program 97.4%
Taylor expanded in z around 0
fp-cancel-sub-sign-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6484.5
Applied rewrites84.5%
Taylor expanded in x around 0
Applied rewrites81.9%
if 4.9999999999999997e104 < (*.f64 x y) Initial program 97.6%
Taylor expanded in z around 0
fp-cancel-sub-sign-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6492.6
Applied rewrites92.6%
Taylor expanded in x around 0
Applied rewrites21.5%
Taylor expanded in a around 0
Applied rewrites90.3%
(FPCore (x y z t a b c)
:precision binary64
(let* ((t_1 (fma (* t z) 0.0625 c)))
(if (<= (* x y) -5e+154)
(fma y x c)
(if (<= (* x y) -1e-19)
t_1
(if (<= (* x y) -4e-263)
(fma -0.25 (* a b) c)
(if (<= (* x y) 5e+104) t_1 (fma y x c)))))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double t_1 = fma((t * z), 0.0625, c);
double tmp;
if ((x * y) <= -5e+154) {
tmp = fma(y, x, c);
} else if ((x * y) <= -1e-19) {
tmp = t_1;
} else if ((x * y) <= -4e-263) {
tmp = fma(-0.25, (a * b), c);
} else if ((x * y) <= 5e+104) {
tmp = t_1;
} else {
tmp = fma(y, x, c);
}
return tmp;
}
function code(x, y, z, t, a, b, c) t_1 = fma(Float64(t * z), 0.0625, c) tmp = 0.0 if (Float64(x * y) <= -5e+154) tmp = fma(y, x, c); elseif (Float64(x * y) <= -1e-19) tmp = t_1; elseif (Float64(x * y) <= -4e-263) tmp = fma(-0.25, Float64(a * b), c); elseif (Float64(x * y) <= 5e+104) tmp = t_1; else tmp = fma(y, x, c); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := Block[{t$95$1 = N[(N[(t * z), $MachinePrecision] * 0.0625 + c), $MachinePrecision]}, If[LessEqual[N[(x * y), $MachinePrecision], -5e+154], N[(y * x + c), $MachinePrecision], If[LessEqual[N[(x * y), $MachinePrecision], -1e-19], t$95$1, If[LessEqual[N[(x * y), $MachinePrecision], -4e-263], N[(-0.25 * N[(a * b), $MachinePrecision] + c), $MachinePrecision], If[LessEqual[N[(x * y), $MachinePrecision], 5e+104], t$95$1, N[(y * x + c), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \mathsf{fma}\left(t \cdot z, 0.0625, c\right)\\
\mathbf{if}\;x \cdot y \leq -5 \cdot 10^{+154}:\\
\;\;\;\;\mathsf{fma}\left(y, x, c\right)\\
\mathbf{elif}\;x \cdot y \leq -1 \cdot 10^{-19}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;x \cdot y \leq -4 \cdot 10^{-263}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, a \cdot b, c\right)\\
\mathbf{elif}\;x \cdot y \leq 5 \cdot 10^{+104}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, x, c\right)\\
\end{array}
\end{array}
if (*.f64 x y) < -5.00000000000000004e154 or 4.9999999999999997e104 < (*.f64 x y) Initial program 96.1%
Taylor expanded in z around 0
fp-cancel-sub-sign-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6491.0
Applied rewrites91.0%
Taylor expanded in x around 0
Applied rewrites15.3%
Taylor expanded in a around 0
Applied rewrites88.6%
if -5.00000000000000004e154 < (*.f64 x y) < -9.9999999999999998e-20 or -4e-263 < (*.f64 x y) < 4.9999999999999997e104Initial program 99.4%
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-*.f6473.5
Applied rewrites73.5%
Taylor expanded in x around 0
Applied rewrites70.8%
if -9.9999999999999998e-20 < (*.f64 x y) < -4e-263Initial program 97.4%
Taylor expanded in z around 0
fp-cancel-sub-sign-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6484.5
Applied rewrites84.5%
Taylor expanded in x around 0
Applied rewrites81.9%
(FPCore (x y z t a b c)
:precision binary64
(let* ((t_1 (/ (* z t) 16.0)))
(if (or (<= t_1 -5e+143) (not (<= t_1 3e+159)))
(* (* 0.0625 z) t)
(fma y x c))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double t_1 = (z * t) / 16.0;
double tmp;
if ((t_1 <= -5e+143) || !(t_1 <= 3e+159)) {
tmp = (0.0625 * z) * t;
} else {
tmp = fma(y, x, c);
}
return tmp;
}
function code(x, y, z, t, a, b, c) t_1 = Float64(Float64(z * t) / 16.0) tmp = 0.0 if ((t_1 <= -5e+143) || !(t_1 <= 3e+159)) tmp = Float64(Float64(0.0625 * z) * t); else tmp = fma(y, x, c); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := Block[{t$95$1 = N[(N[(z * t), $MachinePrecision] / 16.0), $MachinePrecision]}, If[Or[LessEqual[t$95$1, -5e+143], N[Not[LessEqual[t$95$1, 3e+159]], $MachinePrecision]], N[(N[(0.0625 * z), $MachinePrecision] * t), $MachinePrecision], N[(y * x + c), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \frac{z \cdot t}{16}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{+143} \lor \neg \left(t\_1 \leq 3 \cdot 10^{+159}\right):\\
\;\;\;\;\left(0.0625 \cdot z\right) \cdot t\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, x, c\right)\\
\end{array}
\end{array}
if (/.f64 (*.f64 z t) #s(literal 16 binary64)) < -5.00000000000000012e143 or 3.0000000000000002e159 < (/.f64 (*.f64 z t) #s(literal 16 binary64)) Initial program 94.4%
Taylor expanded in t around inf
*-commutativeN/A
lower-*.f64N/A
Applied rewrites94.5%
Taylor expanded in z around inf
Applied rewrites80.2%
if -5.00000000000000012e143 < (/.f64 (*.f64 z t) #s(literal 16 binary64)) < 3.0000000000000002e159Initial program 99.5%
Taylor expanded in z around 0
fp-cancel-sub-sign-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6492.3
Applied rewrites92.3%
Taylor expanded in x around 0
Applied rewrites61.6%
Taylor expanded in a around 0
Applied rewrites63.6%
Final simplification68.0%
(FPCore (x y z t a b c) :precision binary64 (if (or (<= (* x y) -5e+154) (not (<= (* x y) 5e+82))) (fma y x (fma (* t z) 0.0625 c)) (fma (* z 0.0625) t (+ c (* (* a -0.25) b)))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double tmp;
if (((x * y) <= -5e+154) || !((x * y) <= 5e+82)) {
tmp = fma(y, x, fma((t * z), 0.0625, c));
} else {
tmp = fma((z * 0.0625), t, (c + ((a * -0.25) * b)));
}
return tmp;
}
function code(x, y, z, t, a, b, c) tmp = 0.0 if ((Float64(x * y) <= -5e+154) || !(Float64(x * y) <= 5e+82)) tmp = fma(y, x, fma(Float64(t * z), 0.0625, c)); else tmp = fma(Float64(z * 0.0625), t, Float64(c + Float64(Float64(a * -0.25) * b))); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := If[Or[LessEqual[N[(x * y), $MachinePrecision], -5e+154], N[Not[LessEqual[N[(x * y), $MachinePrecision], 5e+82]], $MachinePrecision]], N[(y * x + N[(N[(t * z), $MachinePrecision] * 0.0625 + c), $MachinePrecision]), $MachinePrecision], N[(N[(z * 0.0625), $MachinePrecision] * t + N[(c + N[(N[(a * -0.25), $MachinePrecision] * b), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;x \cdot y \leq -5 \cdot 10^{+154} \lor \neg \left(x \cdot y \leq 5 \cdot 10^{+82}\right):\\
\;\;\;\;\mathsf{fma}\left(y, x, \mathsf{fma}\left(t \cdot z, 0.0625, c\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(z \cdot 0.0625, t, c + \left(a \cdot -0.25\right) \cdot b\right)\\
\end{array}
\end{array}
if (*.f64 x y) < -5.00000000000000004e154 or 5.00000000000000015e82 < (*.f64 x y) Initial program 96.2%
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-*.f6493.9
Applied rewrites93.9%
if -5.00000000000000004e154 < (*.f64 x y) < 5.00000000000000015e82Initial program 99.0%
Taylor expanded in x around 0
fp-cancel-sub-sign-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-*.f6496.6
Applied rewrites96.6%
Applied rewrites97.0%
Final simplification96.1%
(FPCore (x y z t a b c) :precision binary64 (if (or (<= (* x y) -5e+154) (not (<= (* x y) 5e+82))) (fma y x (fma (* t z) 0.0625 c)) (fma -0.25 (* b a) (fma (* z 0.0625) t c))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double tmp;
if (((x * y) <= -5e+154) || !((x * y) <= 5e+82)) {
tmp = fma(y, x, fma((t * z), 0.0625, c));
} else {
tmp = fma(-0.25, (b * a), fma((z * 0.0625), t, c));
}
return tmp;
}
function code(x, y, z, t, a, b, c) tmp = 0.0 if ((Float64(x * y) <= -5e+154) || !(Float64(x * y) <= 5e+82)) tmp = fma(y, x, fma(Float64(t * z), 0.0625, c)); else tmp = fma(-0.25, Float64(b * a), fma(Float64(z * 0.0625), t, c)); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := If[Or[LessEqual[N[(x * y), $MachinePrecision], -5e+154], N[Not[LessEqual[N[(x * y), $MachinePrecision], 5e+82]], $MachinePrecision]], N[(y * x + N[(N[(t * z), $MachinePrecision] * 0.0625 + c), $MachinePrecision]), $MachinePrecision], N[(-0.25 * N[(b * a), $MachinePrecision] + N[(N[(z * 0.0625), $MachinePrecision] * t + c), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;x \cdot y \leq -5 \cdot 10^{+154} \lor \neg \left(x \cdot y \leq 5 \cdot 10^{+82}\right):\\
\;\;\;\;\mathsf{fma}\left(y, x, \mathsf{fma}\left(t \cdot z, 0.0625, c\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, b \cdot a, \mathsf{fma}\left(z \cdot 0.0625, t, c\right)\right)\\
\end{array}
\end{array}
if (*.f64 x y) < -5.00000000000000004e154 or 5.00000000000000015e82 < (*.f64 x y) Initial program 96.2%
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-*.f6493.9
Applied rewrites93.9%
if -5.00000000000000004e154 < (*.f64 x y) < 5.00000000000000015e82Initial program 99.0%
Taylor expanded in x around 0
fp-cancel-sub-sign-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-*.f6496.6
Applied rewrites96.6%
Applied rewrites97.0%
Final simplification96.1%
(FPCore (x y z t a b c)
:precision binary64
(let* ((t_1 (fma (* t z) 0.0625 c)))
(if (or (<= (* x y) -5e+154) (not (<= (* x y) 5e+82)))
(fma y x t_1)
(fma -0.25 (* b a) t_1))))
double code(double x, double y, double z, double t, double a, double b, double c) {
double t_1 = fma((t * z), 0.0625, c);
double tmp;
if (((x * y) <= -5e+154) || !((x * y) <= 5e+82)) {
tmp = fma(y, x, t_1);
} else {
tmp = fma(-0.25, (b * a), t_1);
}
return tmp;
}
function code(x, y, z, t, a, b, c) t_1 = fma(Float64(t * z), 0.0625, c) tmp = 0.0 if ((Float64(x * y) <= -5e+154) || !(Float64(x * y) <= 5e+82)) tmp = fma(y, x, t_1); else tmp = fma(-0.25, Float64(b * a), t_1); end return tmp end
code[x_, y_, z_, t_, a_, b_, c_] := Block[{t$95$1 = N[(N[(t * z), $MachinePrecision] * 0.0625 + c), $MachinePrecision]}, If[Or[LessEqual[N[(x * y), $MachinePrecision], -5e+154], N[Not[LessEqual[N[(x * y), $MachinePrecision], 5e+82]], $MachinePrecision]], N[(y * x + t$95$1), $MachinePrecision], N[(-0.25 * N[(b * a), $MachinePrecision] + t$95$1), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \mathsf{fma}\left(t \cdot z, 0.0625, c\right)\\
\mathbf{if}\;x \cdot y \leq -5 \cdot 10^{+154} \lor \neg \left(x \cdot y \leq 5 \cdot 10^{+82}\right):\\
\;\;\;\;\mathsf{fma}\left(y, x, t\_1\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, b \cdot a, t\_1\right)\\
\end{array}
\end{array}
if (*.f64 x y) < -5.00000000000000004e154 or 5.00000000000000015e82 < (*.f64 x y) Initial program 96.2%
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-*.f6493.9
Applied rewrites93.9%
if -5.00000000000000004e154 < (*.f64 x y) < 5.00000000000000015e82Initial program 99.0%
Taylor expanded in x around 0
fp-cancel-sub-sign-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-*.f6496.6
Applied rewrites96.6%
Final simplification95.7%
(FPCore (x y z t a b c)
:precision binary64
(if (<= (* x y) -2e+137)
(fma y x c)
(if (<= (* x y) -1e+67)
(* (* 0.0625 z) t)
(if (<= (* x y) 5e+82) (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+137) {
tmp = fma(y, x, c);
} else if ((x * y) <= -1e+67) {
tmp = (0.0625 * z) * t;
} else if ((x * y) <= 5e+82) {
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+137) tmp = fma(y, x, c); elseif (Float64(x * y) <= -1e+67) tmp = Float64(Float64(0.0625 * z) * t); elseif (Float64(x * y) <= 5e+82) 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+137], N[(y * x + c), $MachinePrecision], If[LessEqual[N[(x * y), $MachinePrecision], -1e+67], N[(N[(0.0625 * z), $MachinePrecision] * t), $MachinePrecision], If[LessEqual[N[(x * y), $MachinePrecision], 5e+82], 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^{+137}:\\
\;\;\;\;\mathsf{fma}\left(y, x, c\right)\\
\mathbf{elif}\;x \cdot y \leq -1 \cdot 10^{+67}:\\
\;\;\;\;\left(0.0625 \cdot z\right) \cdot t\\
\mathbf{elif}\;x \cdot y \leq 5 \cdot 10^{+82}:\\
\;\;\;\;\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) < -2.0000000000000001e137 or 5.00000000000000015e82 < (*.f64 x y) Initial program 96.3%
Taylor expanded in z around 0
fp-cancel-sub-sign-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6490.2
Applied rewrites90.2%
Taylor expanded in x around 0
Applied rewrites17.2%
Taylor expanded in a around 0
Applied rewrites86.7%
if -2.0000000000000001e137 < (*.f64 x y) < -9.99999999999999983e66Initial program 100.0%
Taylor expanded in t around inf
*-commutativeN/A
lower-*.f64N/A
Applied rewrites100.0%
Taylor expanded in z around inf
Applied rewrites78.5%
if -9.99999999999999983e66 < (*.f64 x y) < 5.00000000000000015e82Initial program 98.9%
Taylor expanded in z around 0
fp-cancel-sub-sign-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6470.8
Applied rewrites70.8%
Taylor expanded in x around 0
Applied rewrites68.2%
(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 z around 0
fp-cancel-sub-sign-invN/A
metadata-evalN/A
+-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6475.3
Applied rewrites75.3%
Taylor expanded in x around 0
Applied rewrites50.5%
Taylor expanded in a around 0
Applied rewrites51.1%
(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 t around inf
*-commutativeN/A
lower-*.f64N/A
Applied rewrites76.4%
Taylor expanded in x around inf
Applied rewrites27.7%
herbie shell --seed 2024339
(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))