예제 #1
0
        internal static float Convert(ushort value)
        {
            uint rst;
            uint mantissa = (uint)(value & 1023);
            uint exp      = 0xfffffff2;

            if ((value & -33792) == 0)
            {
                if (mantissa != 0)
                {
                    while ((mantissa & 1024) == 0)
                    {
                        exp--;
                        mantissa = mantissa << 1;
                    }
                    mantissa &= 0xfffffbff;
                    rst       = ((uint)((((uint)value & 0x8000) << 16) | ((exp + 127) << 23))) | (mantissa << 13);
                }
                else
                {
                    rst = (uint)((value & 0x8000) << 16);
                }
            }
            else
            {
                rst = (uint)(((((uint)value & 0x8000) << 16) | ((((((uint)value >> 10) & 0x1f) - 15) + 127) << 23)) | (mantissa << 13));
            }

            uif uif = new uif();

            uif.u = rst;
            return(uif.f);
        }
예제 #2
0
        internal static ushort Convert(float f)
        {
            uif uif = new uif();

            uif.f = f;
            return(Convert(uif.i));
        }
예제 #3
0
        internal static UInt16 Convert(float f)
        {
            uif uif = new uif();

            uif.f = f;
            return(Convert(uif.i));
        }
예제 #4
0
        internal static float Convert(ushort value)
        {
            uint rst;
            uint mantissa = (uint)(value & 1023);
            uint exp = 0xfffffff2;

            if ((value & -33792) == 0)
            {
                if (mantissa != 0)
                {
                    while ((mantissa & 1024) == 0)
                    {
                        exp--;
                        mantissa = mantissa << 1;
                    }
                    mantissa &= 0xfffffbff;
                    rst = ((uint)((((uint)value & 0x8000) << 16) | ((exp + 127) << 23))) | (mantissa << 13);
                }
                else
                {
                    rst = (uint)((value & 0x8000) << 16);
                }
            }
            else
            {
                rst = (uint)(((((uint)value & 0x8000) << 16) | ((((((uint)value >> 10) & 0x1f) - 15) + 127) << 23)) | (mantissa << 13));
            }

            var uif = new uif();
            uif.u = rst;
            return uif.f;
        }
예제 #5
0
 internal static UInt16 Convert(float f)
 {
     uif uif = new uif();
     uif.f = f;
     return Convert(uif.i);
 }