using System;
public class Test
{
public static void Main()
{
double d = -0.99999999999999956d;
decimal result = Convert.ToDecimal(d); // Result = -1
decimal t = 0M;
bool b = d < 0;
if (b) d = -d;
if (d >= 0.5) { d -= 0.5; t += 0.5M; }
if (d >= 0.25) { d -= 0.25; t += 0.25M; }
if (d >= 0.125) { d -= 0.125; t += 0.125M; }
if (d >= 0.0625) { d -= 0.0625; t += 0.0625M; }
t += Convert.ToDecimal(d);
if (b) t = -t;
Console.WriteLine(t);
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewogICAgICAgIGRvdWJsZSBkID0gLTAuOTk5OTk5OTk5OTk5OTk5NTZkOwogICAgICAgIGRlY2ltYWwgcmVzdWx0ID0gQ29udmVydC5Ub0RlY2ltYWwoZCk7IC8vIFJlc3VsdCA9IC0xCiAgICAgICAgZGVjaW1hbCB0ID0gME07CiAgICAgICAgYm9vbCBiID0gZCA8IDA7CiAgICAgICAgaWYgKGIpIGQgPSAtZDsKICAgICAgICBpZiAoZCA+PSAwLjUpIHsgZCAtPSAwLjU7IHQgKz0gMC41TTsgfQogICAgICAgIGlmIChkID49IDAuMjUpIHsgZCAtPSAwLjI1OyB0ICs9IDAuMjVNOyB9CiAgICAgICAgaWYgKGQgPj0gMC4xMjUpIHsgZCAtPSAwLjEyNTsgdCArPSAwLjEyNU07IH0KICAgICAgICBpZiAoZCA+PSAwLjA2MjUpIHsgZCAtPSAwLjA2MjU7IHQgKz0gMC4wNjI1TTsgfQogICAgICAgIHQgKz0gQ29udmVydC5Ub0RlY2ltYWwoZCk7CiAgICAgICAgaWYgKGIpIHQgPSAtdDsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSh0KTsKCX0KfQ==