/// <summary> /// Convert the bits of its representation to a float /// </summary> private static float Int32BitsToFloat(uint i) { FloatUnion bits = default(FloatUnion); bits.IntData = i; return(bits.FloatData); }
/// <summary> /// Convert a float value to the bits of its representation /// </summary> private static uint FloatToInt32Bits(float f) { FloatUnion bits = default(FloatUnion); bits.FloatData = f; return(bits.IntData); }
public void Test() { FloatUnion testUnion = new FloatUnion(); testUnion.value = 100.2f; int dummy = 0; }
public FloatPartition(float f) { FloatUnion fUnion = default(FloatUnion); fUnion.FloatValue = f; this.Sign = GetSign(fUnion.UintValue); this.Exponent = GetExponent(fUnion.UintValue); this.Mantissa = GetMantissa(fUnion.UintValue); }
static UInt16 ToUInt16(float value) { int intValue = new FloatUnion() { Float = value }.Int; int sign = (intValue >> 16) & 0x00008000; int exponent = ((intValue >> 23) & 0x000000ff) - (127 - 15); int mantissa = intValue & 0x007fffff; if (exponent <= 0) { if (exponent < -10) { return((UInt16)sign); } mantissa = mantissa | 0x00800000; int t = 14 - exponent; int a = (1 << (t - 1)) - 1; int b = (mantissa >> t) & 1; mantissa = (mantissa + a + b) >> t; return((UInt16)(sign | mantissa)); } else if (exponent == 0xff - (127 - 15)) { if (mantissa == 0) { return((UInt16)(sign | 0x7c00)); } else { mantissa >>= 13; return((UInt16)(sign | 0x7c00 | mantissa | ((mantissa == 0) ? 1 : 0))); } } else { mantissa = mantissa + 0x00000fff + ((mantissa >> 13) & 1); if ((mantissa & 0x00800000) != 0) { mantissa = 0; exponent += 1; } if (exponent > 30) { return((UInt16)(sign | 0x7c00)); } return((UInt16)(sign | (exponent << 10) | (mantissa >> 13))); } }
private void pushFloat(float f) { FloatUnion union = new FloatUnion(); union.value = f; pushChar(union.b8); pushChar(union.b16); pushChar(union.b24); pushChar(union.b32); }
public static void Write(BitStream stream, float value) { var cc = new FloatUnion { Value = value }; Write(stream, cc.byte0); Write(stream, cc.byte1); Write(stream, cc.byte2); Write(stream, cc.byte3); }
public static void Write(ref byte[] bytes, ref int offset, float value) { var cc = new FloatUnion { Value = value }; Write(ref bytes, ref offset, cc.byte0); Write(ref bytes, ref offset, cc.byte1); Write(ref bytes, ref offset, cc.byte2); Write(ref bytes, ref offset, cc.byte3); }
public static bool IsInfinity(FloatUnion floatUnion) { return(GetRawExponent(floatUnion) == 255 && GetRawMantissa(floatUnion) == 0); }
public static bool IsZero(FloatUnion floatUnion) { return((floatUnion.UintValue & 0x7FFFFFFF) == 0); }
public static bool IsNegative(FloatUnion floatUnion) { return(((floatUnion.UintValue & SignMask) >> 31) == 1); }
public static uint GetRawMantissa(FloatUnion floatUnion) { return(floatUnion.UintValue & MantissaMask); }
public static byte GetRawExponent(FloatUnion floatUnion) { return(Convert.ToByte((floatUnion.UintValue & ExponentMask) >> 23)); }