const string formatter = "{0,20}{1,27:E16}";
public static void LongBitsToDouble(long argument)
double doubleValue = argument.Int64BitsToDouble();
Console.WriteLine(formatter, String.Format("0x{0:X16}", argument), doubleValue);
public static void Main()
Console.WriteLine(formatter, "long argument", "double value");
Console.WriteLine(formatter, "-------------", "------------");
LongBitsToDouble(0x3FF0000000000000);
LongBitsToDouble(0x402E000000000000);
LongBitsToDouble(0x406FE00000000000);
LongBitsToDouble(0x41EFFFFFFFE00000);
LongBitsToDouble(0x3F70000000000000);
LongBitsToDouble(0x3DF0000000000000);
LongBitsToDouble(0x0000000000000001);
LongBitsToDouble(0x000000000000FFFF);
LongBitsToDouble(0x0000FFFFFFFFFFFF);
LongBitsToDouble(unchecked((long)0xFFFFFFFFFFFFFFFF));
LongBitsToDouble(unchecked((long)0xFFF0000000000000));
LongBitsToDouble(0x7FF0000000000000);
LongBitsToDouble(unchecked((long)0xFFEFFFFFFFFFFFFF));
LongBitsToDouble(0x7FEFFFFFFFFFFFFF);
LongBitsToDouble(long.MinValue);
LongBitsToDouble(long.MaxValue);