Beispiel #1
0
 public void BitsRequiredByLargestExpressablePositiveIntegerIsCorrect()
 {
     Assert.AreEqual(UnumHelper.BitsRequiredByLargestExpressablePositiveInteger(_warlpiriEnvironment), 2);
     Assert.AreEqual(UnumHelper.BitsRequiredByLargestExpressablePositiveInteger(_environment_2_2), 9);
     Assert.AreEqual(UnumHelper.BitsRequiredByLargestExpressablePositiveInteger(_environment_2_3), 9);
     Assert.AreEqual(UnumHelper.BitsRequiredByLargestExpressablePositiveInteger(_environment_2_4), 9);
     Assert.AreEqual(UnumHelper.BitsRequiredByLargestExpressablePositiveInteger(_environment_3_2), 129);
 }
Beispiel #2
0
 public void LargestExpressablePositiveIntegerIsCorrect()
 {
     Assert.AreEqual(UnumHelper.LargestExpressablePositiveInteger(_environment_4_8), _environment_4_8.EmptyBitMask);
     Assert.AreEqual(UnumHelper.LargestExpressablePositiveInteger(_environment_3_2), _environment_3_2.EmptyBitMask);
     Assert.AreEqual(UnumHelper.LargestExpressablePositiveInteger(_warlpiriEnvironment), new BitMask(2, _warlpiriEnvironment.Size));
     Assert.AreEqual(UnumHelper.LargestExpressablePositiveInteger(_environment_2_2), new BitMask(480, _environment_2_2.Size));
     Assert.AreEqual(UnumHelper.LargestExpressablePositiveInteger(_environment_2_3), new BitMask(510, _environment_2_3.Size));
     Assert.AreEqual(UnumHelper.LargestExpressablePositiveInteger(_environment_2_4), new BitMask(511, _environment_2_4.Size));
 }
Beispiel #3
0
        }                                // "minrealu"

        #endregion


        public UnumEnvironment(byte exponentSizeSize, byte fractionSizeSize)
        {
            // Initializing structure.
            ExponentSizeSize = exponentSizeSize;
            FractionSizeSize = fractionSizeSize;

            ExponentSizeMax = (byte)UnumHelper.SegmentSizeSizeToSegmentSize(ExponentSizeSize);
            FractionSizeMax = UnumHelper.SegmentSizeSizeToSegmentSize(FractionSizeSize);

            UnumTagSize = (byte)(1 + ExponentSizeSize + FractionSizeSize);
            Size        = (ushort)(1 + ExponentSizeMax + FractionSizeMax + UnumTagSize);

            // Initializing masks.
            EmptyBitMask = new BitMask(Size);

            UncertaintyBitMask = new BitMask(Size).SetOne((ushort)(UnumTagSize - 1));

            FractionSizeMask = new BitMask(Size).SetOne(FractionSizeSize) - 1;

            ExponentSizeMask = UncertaintyBitMask - 1 - FractionSizeMask;

            ExponentAndFractionSizeMask = ExponentSizeMask | FractionSizeMask;
            UnumTagMask = UncertaintyBitMask + ExponentAndFractionSizeMask;

            SignBitMask = new BitMask(Size).SetOne((ushort)(Size - 1));

            // Initializing environment.
            ULP = new BitMask(Size).SetOne(UnumTagSize);

            PositiveInfinity = new BitMask(Size).SetOne((ushort)(Size - 1)) - 1 - UncertaintyBitMask;

            NegativeInfinity = new BitMask(Size).SetOne((ushort)(Size - 1)) + PositiveInfinity;

            LargestPositive  = PositiveInfinity - ULP;
            SmallestPositive = ExponentAndFractionSizeMask + ULP;

            LargestNegative = NegativeInfinity - ULP;

            MinRealU = LargestPositive + ((uint)1 << Size - 1);

            QuietNotANumber     = PositiveInfinity + UncertaintyBitMask;
            SignalingNotANumber = NegativeInfinity + UncertaintyBitMask;
        }
Beispiel #4
0
 public static UnumEnvironment FromConfigurationValues(byte eSize, ushort fSize) =>
 new UnumEnvironment(UnumHelper.SegmentSizeToSegmentSizeSize(eSize), UnumHelper.SegmentSizeToSegmentSizeSize(fSize));