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 47 48 | class Program { static string EncodeDouble(double d) { long ieee = System.BitConverter.DoubleToInt64Bits(d); ulong widezero = 0; ulong lex = ((ieee < 0)? widezero: ((~widezero) >> 1)) ^ (ulong)~ieee; return lex.ToString("X16"); } static double DecodeDouble(string s) { ulong lex = ulong.Parse(s, System.Globalization.NumberStyles.AllowHexSpecifier); 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); } } |
Y2xhc3MgUHJvZ3JhbQp7CiAgICBzdGF0aWMgc3RyaW5nIEVuY29kZURvdWJsZShkb3VibGUgZCkKICAgIHsKICAgICAgICBsb25nIGllZWUgPSBTeXN0ZW0uQml0Q29udmVydGVyLkRvdWJsZVRvSW50NjRCaXRzKGQpOwogICAgICAgIHVsb25nIHdpZGV6ZXJvID0gMDsKICAgICAgICB1bG9uZyBsZXggPSAoKGllZWUgPCAwKT8gd2lkZXplcm86ICgofndpZGV6ZXJvKSA+PiAxKSkgXiAodWxvbmcpfmllZWU7CiAgICAgICAgcmV0dXJuIGxleC5Ub1N0cmluZygiWDE2Iik7CiAgICB9CgogICAgc3RhdGljIGRvdWJsZSBEZWNvZGVEb3VibGUoc3RyaW5nIHMpCiAgICB7CiAgICAgICAgdWxvbmcgbGV4ID0gdWxvbmcuUGFyc2UocywgU3lzdGVtLkdsb2JhbGl6YXRpb24uTnVtYmVyU3R5bGVzLkFsbG93SGV4U3BlY2lmaWVyKTsKICAgICAgICB1bG9uZyB3aWRlemVybyA9IDA7CiAgICAgICAgbG9uZyBpZWVlID0gKGxvbmcpKCgoMCA8PSAobG9uZylsZXgpPyB3aWRlemVybzogKCh+d2lkZXplcm8pID4+IDEpKSBeIH5sZXgpOwogICAgICAgIHJldHVybiBTeXN0ZW0uQml0Q29udmVydGVyLkludDY0Qml0c1RvRG91YmxlKGllZWUpOwogICAgfQoKICAgIHN0YXRpYyB2b2lkIFRlc3QoZG91YmxlIGEsIGRvdWJsZSBiKQogICAgewogICAgICAgIFN5c3RlbS5Db25zb2xlLldyaXRlTGluZShhLlRvU3RyaW5nKCkgKyAiIDw9PiAiICsgYi5Ub1N0cmluZygpICsgKGEuQ29tcGFyZVRvKGIpID09IEVuY29kZURvdWJsZShhKS5Db21wYXJlVG8oRW5jb2RlRG91YmxlKGIpKT8gIiA6IHBhc3MiIDogIiA6IGZhaWwiKSk7CiAgICB9CgogICAgc3RhdGljIHZvaWQgUm91bmR0cmlwKGRvdWJsZSBhKQogICAgewogICAgICAgIFN5c3RlbS5Db25zb2xlLldyaXRlTGluZShhLlRvU3RyaW5nKCkgKyAoYSA9PSBEZWNvZGVEb3VibGUoRW5jb2RlRG91YmxlKGEpKT8gIiByb3VuZHRyaXBzIjogIiBmYWlscyIpKTsKICAgIH0KCiAgICBzdGF0aWMgdm9pZCBNYWluKCkKICAgIHsKICAgICAgICBUZXN0KDIsIDIpOwogICAgICAgIFRlc3QoMiwgMyk7CiAgICAgICAgVGVzdCgyLCAyMCk7CiAgICAgICAgVGVzdCgyLCAwLjUpOwogICAgICAgIFRlc3QoMiwgLTIpOwogICAgICAgIFRlc3QoLTIsIC0zKTsKICAgICAgICBUZXN0KC0yLCAtMjApOwogICAgICAgIFRlc3QoLTIsIC0wLjUpOwoKICAgICAgICBSb3VuZHRyaXAoMik7CiAgICAgICAgUm91bmR0cmlwKDMpOwogICAgICAgIFJvdW5kdHJpcCgyMCk7CiAgICAgICAgUm91bmR0cmlwKDAuNSk7CiAgICAgICAgUm91bmR0cmlwKC0yKTsKICAgICAgICBSb3VuZHRyaXAoLTMpOwogICAgICAgIFJvdW5kdHJpcCgtMC41KTsKICAgIH0KfQ==
-
upload with new input
-
result: Success time: 0.02s memory: 38112 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


