#include <iostream>
using namespace std;
union F2U {
float fl;
unsigned ui;
};
void printFloat(const char* name, float x) {
F2U f;
f.fl = x;
printf("%s = %f \t 0x%x\n", name, f.fl, f.ui);
}
float fromUint( uint i) {
F2U f;
f.ui = i;
return f.fl;
}
int main() {
float a = 0.1f;
float b = fromUint(0x36400497);
printFloat("a", a);
printFloat("b", b);
const float split = 8193.0;
float ca = split * a;
float cb = split * b;
float v1a = ca - (ca - a);
float v1b = cb - (cb - b);
printFloat("v1a", v1a);
printFloat("v1b", v1b);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdW5pb24gRjJVIHsKCWZsb2F0IGZsOwoJdW5zaWduZWQgdWk7Cn07Cgp2b2lkIHByaW50RmxvYXQoY29uc3QgY2hhciogbmFtZSwgZmxvYXQgeCkgewoJRjJVIGY7CglmLmZsID0geDsKCXByaW50ZigiJXMgPSAlZiBcdCAweCV4XG4iLCBuYW1lLCBmLmZsLCBmLnVpKTsKfQoKZmxvYXQgZnJvbVVpbnQoIHVpbnQgaSkgewoJRjJVIGY7CglmLnVpID0gaTsKCXJldHVybiBmLmZsOwp9CgppbnQgbWFpbigpIHsKCQoJZmxvYXQgYSA9IDAuMWY7CgoJZmxvYXQgYiA9IGZyb21VaW50KDB4MzY0MDA0OTcpOwoJCglwcmludEZsb2F0KCJhIiwgYSk7CglwcmludEZsb2F0KCJiIiwgYik7CgkKCWNvbnN0IGZsb2F0IHNwbGl0ID0gODE5My4wOwoKICAgIGZsb2F0IGNhID0gc3BsaXQgKiBhOwogICAgZmxvYXQgY2IgPSBzcGxpdCAqIGI7CgogICAgZmxvYXQgdjFhID0gY2EgLSAoY2EgLSBhKTsKICAgIGZsb2F0IHYxYiA9IGNiIC0gKGNiIC0gYik7CgoJcHJpbnRGbG9hdCgidjFhIiwgdjFhKTsKCXByaW50RmxvYXQoInYxYiIsIHYxYik7CgkKCXJldHVybiAwOwp9