#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
void print(double v)
{
cout << "0x" << hex << (*(long *)&v) << " = " << fixed << setprecision(40) << v << endl;
}
int main()
{
// unsigned long val_ul = 0x3d824f7400000000;
// double val = *(double *)&val_ul;
double val = 0.0;
double step = 0.001;
double min = -99999.0;
double max = 99999.0;
double r1 = val - min;
double r2 = r1 / step;
double r3 = round(r2);
double r4 = r3 * step;
double r5 = r4 + min;
print(val);
print(step);
print(min);
print(max);
cout << endl;
print(r1);
print(r2);
print(r3);
print(r4);
print(r5);
cout << endl;
double temp = round((val - min) / step) * step;
double correct = temp + min;
print(correct);
cout << endl;
double wrong = round((val - min) / step) * step + min;
print(wrong);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBwcmludChkb3VibGUgdikKewoJY291dCA8PCAiMHgiIDw8IGhleCA8PCAoKihsb25nICopJnYpIDw8ICIgPSAiIDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbig0MCkgPDwgdiA8PCBlbmRsOwp9CgppbnQgbWFpbigpCnsKCS8vIHVuc2lnbmVkIGxvbmcgdmFsX3VsID0gMHgzZDgyNGY3NDAwMDAwMDAwOwoJLy8gZG91YmxlIHZhbCA9ICooZG91YmxlICopJnZhbF91bDsKCglkb3VibGUgdmFsID0gMC4wOwoKCWRvdWJsZSBzdGVwID0gMC4wMDE7Cglkb3VibGUgbWluID0gLTk5OTk5LjA7Cglkb3VibGUgbWF4ID0gOTk5OTkuMDsKCglkb3VibGUgcjEgPSB2YWwgLSBtaW47Cglkb3VibGUgcjIgPSByMSAvIHN0ZXA7Cglkb3VibGUgcjMgPSByb3VuZChyMik7Cglkb3VibGUgcjQgPSByMyAqIHN0ZXA7Cglkb3VibGUgcjUgPSByNCArIG1pbjsKCglwcmludCh2YWwpOwoJcHJpbnQoc3RlcCk7CglwcmludChtaW4pOwoJcHJpbnQobWF4KTsKCgljb3V0IDw8IGVuZGw7CgoJcHJpbnQocjEpOwoJcHJpbnQocjIpOwoJcHJpbnQocjMpOwoJcHJpbnQocjQpOwoJcHJpbnQocjUpOwoKCWNvdXQgPDwgZW5kbDsKCglkb3VibGUgdGVtcCA9IHJvdW5kKCh2YWwgLSBtaW4pIC8gc3RlcCkgKiBzdGVwOwoJZG91YmxlIGNvcnJlY3QgPSB0ZW1wICsgbWluOwoJcHJpbnQoY29ycmVjdCk7CgoJY291dCA8PCBlbmRsOwoKCWRvdWJsZSB3cm9uZyA9IHJvdW5kKCh2YWwgLSBtaW4pIC8gc3RlcCkgKiBzdGVwICsgbWluOwoJcHJpbnQod3JvbmcpOwoKCXJldHVybiAwOwp9