Beispiel #1
0
        /// <summary>
        /// Unpacks a <see cref="ushort"/> into a <see cref="float"/>.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <returns>The <see cref="float"/>.</returns>
        internal static float Unpack(ushort value)
        {
            uint result;
            uint mantissa = (uint)(value & 1023);
            uint exponent = 0xfffffff2;

            if ((value & -33792) == 0)
            {
                if (mantissa != 0)
                {
                    while ((mantissa & 1024) == 0)
                    {
                        exponent--;
                        mantissa = mantissa << 1;
                    }

                    mantissa &= 0xfffffbff;
                    result    = ((uint)((((uint)value & 0x8000) << 16) | ((exponent + 127) << 23))) | (mantissa << 13);
                }
                else
                {
                    result = (uint)((value & 0x8000) << 16);
                }
            }
            else
            {
                result = ((((uint)value & 0x8000) << 16) | ((((((uint)value >> 10) & 0x1f) - 15) + 127) << 23)) | (mantissa << 13);
            }

            Uif uif = new Uif {
                U = result
            };

            return(uif.F);
        }
Beispiel #2
0
        internal static ushort Pack(float value)
        {
            Uif uif = new Uif {
                F = value
            };

            return(Pack(uif.I));
        }