1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | class Program { static ulong EncodeDouble(double d) { long ieee = System.BitConverter.DoubleToInt64Bits(d); ulong widezero = 0; return ((ieee < 0)? widezero: ((~widezero) >> 1)) ^ (ulong)~ieee; } static double DecodeDouble(ulong lex) { ulong widezero = 0; long ieee = (long)(((0 <= (long)lex)? widezero: ((~widezero) >> 1)) ^ ~lex); return System.BitConverter.Int64BitsToDouble(ieee); } static void Test(double a, double b) { System.Console.WriteLine(a.ToString() + " <=> " + b.ToString() + (a.CompareTo(b) == EncodeDouble(a).CompareTo(EncodeDouble(b))? " : pass" : " : fail")); } static void Roundtrip(double a) { System.Console.WriteLine(a.ToString() + (a == DecodeDouble(EncodeDouble(a))? " roundtrips": " fails")); } static void Main() { Test(2, 2); Test(2, 3); Test(2, 20); Test(2, 0.5); Test(2, -2); Test(-2, -3); Test(-2, -20); Test(-2, -0.5); Roundtrip(2); Roundtrip(3); Roundtrip(20); Roundtrip(0.5); Roundtrip(-2); Roundtrip(-3); Roundtrip(-0.5); } } |
Y2xhc3MgUHJvZ3JhbQp7CiAgICBzdGF0aWMgdWxvbmcgRW5jb2RlRG91YmxlKGRvdWJsZSBkKQogICAgewogICAgICAgIGxvbmcgaWVlZSA9IFN5c3RlbS5CaXRDb252ZXJ0ZXIuRG91YmxlVG9JbnQ2NEJpdHMoZCk7CiAgICAgICAgdWxvbmcgd2lkZXplcm8gPSAwOwogICAgICAgIHJldHVybiAoKGllZWUgPCAwKT8gd2lkZXplcm86ICgofndpZGV6ZXJvKSA+PiAxKSkgXiAodWxvbmcpfmllZWU7CiAgICB9CgogICAgc3RhdGljIGRvdWJsZSBEZWNvZGVEb3VibGUodWxvbmcgbGV4KQogICAgewogICAgICAgIHVsb25nIHdpZGV6ZXJvID0gMDsKICAgICAgICBsb25nIGllZWUgPSAobG9uZykoKCgwIDw9IChsb25nKWxleCk/IHdpZGV6ZXJvOiAoKH53aWRlemVybykgPj4gMSkpIF4gfmxleCk7CiAgICAgICAgcmV0dXJuIFN5c3RlbS5CaXRDb252ZXJ0ZXIuSW50NjRCaXRzVG9Eb3VibGUoaWVlZSk7CiAgICB9CgogICAgc3RhdGljIHZvaWQgVGVzdChkb3VibGUgYSwgZG91YmxlIGIpCiAgICB7CiAgICAgICAgU3lzdGVtLkNvbnNvbGUuV3JpdGVMaW5lKGEuVG9TdHJpbmcoKSArICIgPD0+ICIgKyBiLlRvU3RyaW5nKCkgKyAoYS5Db21wYXJlVG8oYikgPT0gRW5jb2RlRG91YmxlKGEpLkNvbXBhcmVUbyhFbmNvZGVEb3VibGUoYikpPyAiIDogcGFzcyIgOiAiIDogZmFpbCIpKTsKICAgIH0KCiAgICBzdGF0aWMgdm9pZCBSb3VuZHRyaXAoZG91YmxlIGEpCiAgICB7CiAgICAgICAgU3lzdGVtLkNvbnNvbGUuV3JpdGVMaW5lKGEuVG9TdHJpbmcoKSArIChhID09IERlY29kZURvdWJsZShFbmNvZGVEb3VibGUoYSkpPyAiIHJvdW5kdHJpcHMiOiAiIGZhaWxzIikpOwogICAgfQoKICAgIHN0YXRpYyB2b2lkIE1haW4oKQogICAgewogICAgICAgIFRlc3QoMiwgMik7CiAgICAgICAgVGVzdCgyLCAzKTsKICAgICAgICBUZXN0KDIsIDIwKTsKICAgICAgICBUZXN0KDIsIDAuNSk7CiAgICAgICAgVGVzdCgyLCAtMik7CiAgICAgICAgVGVzdCgtMiwgLTMpOwogICAgICAgIFRlc3QoLTIsIC0yMCk7CiAgICAgICAgVGVzdCgtMiwgLTAuNSk7CgogICAgICAgIFJvdW5kdHJpcCgyKTsKICAgICAgICBSb3VuZHRyaXAoMyk7CiAgICAgICAgUm91bmR0cmlwKDIwKTsKICAgICAgICBSb3VuZHRyaXAoMC41KTsKICAgICAgICBSb3VuZHRyaXAoLTIpOwogICAgICAgIFJvdW5kdHJpcCgtMyk7CiAgICAgICAgUm91bmR0cmlwKC0wLjUpOwogICAgfQp9
-
upload with new input
-
result: Success time: 0.01s memory: 38000 kB returned value: 0
2 <=> 2 : pass 2 <=> 3 : pass 2 <=> 20 : pass 2 <=> 0.5 : pass 2 <=> -2 : pass -2 <=> -3 : pass -2 <=> -20 : pass -2 <=> -0.5 : pass 2 roundtrips 3 roundtrips 20 roundtrips 0.5 roundtrips -2 roundtrips -3 roundtrips -0.5 roundtrips


