Ejemplo n.º 1
0
        public static bool[] fcmp(Span <double> lhs, Span <double> rhs, FpCmpMode kind)
        {
            var len    = length(lhs, rhs);
            var result = alloc <bool>(len);

            for (var i = 0; i < len; i++)
            {
                result[i] = fcmp(lhs[i], rhs[i], kind);
            }
            return(result);
        }
Ejemplo n.º 2
0
        void cmp256f64_check(FpCmpMode mode)
        {
            for (var i = 0; i < SampleSize; i++)
            {
                var x = Random.CpuVec256 <double>();
                var y = Random.CpuVec256 <double>();

                Span <double> xDst = stackalloc double[4];
                x.StoreTo(ref head(xDst));

                Span <double> yDst = stackalloc double[4];
                y.StoreTo(ref head(yDst));

                var expect = fmath.fcmp(xDst, yDst, mode);
                var actual = dfp.cmpf(x, y, mode);
                Claim.eq(expect, actual);
            }
        }
Ejemplo n.º 3
0
        void cmp128f64_check(FpCmpMode mode)
        {
            for (var i = 0; i < SampleSize; i++)
            {
                var lhs = Random.CpuVec128 <double>();
                var rhs = Random.CpuVec128 <double>();

                Span <double> lDst = stackalloc double[2];
                lhs.StoreTo(ref head(lDst));

                Span <double> rDst = stackalloc double[2];
                rhs.StoreTo(ref head(rDst));

                var expect = fmath.fcmp(lDst, rDst, mode);
                var actual = dfp.cmpf(lhs, rhs, mode);
                Claim.eq(expect, actual);
            }
        }
Ejemplo n.º 4
0
        public static bool fcmp(double x, double y, FpCmpMode mode)
        {
            var result = mode switch
            {
                FpCmpMode.EQ_OQ => x == y,
                FpCmpMode.EQ_OS => x == y,
                FpCmpMode.EQ_UQ => x == y,
                FpCmpMode.EQ_US => x == y,

                FpCmpMode.NEQ_OQ => x != y,
                FpCmpMode.NEQ_OS => x != y,
                FpCmpMode.NEQ_UQ => x != y,
                FpCmpMode.NEQ_US => x != y,

                FpCmpMode.LT_OQ => x <y,
                                      FpCmpMode.LT_OS => x <y,

                                                            FpCmpMode.GT_OQ => x> y,
                                      FpCmpMode.GT_OS => x> y,

                FpCmpMode.LE_OQ => x <= y,
                FpCmpMode.LE_OS => x <= y,

                FpCmpMode.GE_OQ => x >= y,
                FpCmpMode.GE_OS => x >= y,

                FpCmpMode.NGE_UQ => !(x >= y),
                FpCmpMode.NGE_US => !(x >= y),

                FpCmpMode.NGT_UQ => !(x > y),
                FpCmpMode.NGT_US => !(x > y),

                FpCmpMode.NLE_UQ => !(x <= y),
                FpCmpMode.NLE_US => !(x <= y),

                FpCmpMode.NLT_UQ => !(x < y),
                FpCmpMode.NLT_US => !(x < y),

                _ => throw new NotSupportedException()
            };

            return(result);
        }
Ejemplo n.º 5
0
 static FloatComparisonMode fpmode(FpCmpMode m)
 => (FloatComparisonMode)m;