#include <iostream>
#include <iomanip>
void print_bytes(char const *name, double d)
{
unsigned char *pd = reinterpret_cast<unsigned char*>(&d);
std::cout << name << " = " << std::setw(2) << d << " => ";
for(int i = 0 ; i < sizeof(d) ; ++i)
std::cout << std::setw(-3) << (unsigned)pd[i] << " ";
std::cout << std::endl;
}
#define print_bytes_of(a) print_bytes(#a, a)
int main()
{
double a = 0.0;
double b = -0.0;
std::cout << "Value comparison" << std::endl;
std::cout << "(a==b) => " << (a==b) <<std::endl;
std::cout << "(a!=b) => " << (a!=b) <<std::endl;
std::cout << "\nValue representation" << std::endl;
print_bytes_of(a);
print_bytes_of(b);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCnZvaWQgcHJpbnRfYnl0ZXMoY2hhciBjb25zdCAqbmFtZSwgZG91YmxlIGQpCnsKCXVuc2lnbmVkIGNoYXIgKnBkID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oJmQpOwogICAgc3RkOjpjb3V0IDw8IG5hbWUgPDwgIiA9ICIgPDwgc3RkOjpzZXR3KDIpIDw8IGQgPDwgIiA9PiAiOwogICAgZm9yKGludCBpID0gMCA7IGkgPCBzaXplb2YoZCkgOyArK2kpCiAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjpzZXR3KC0zKSA8PCAodW5zaWduZWQpcGRbaV0gPDwgIiAiOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKfQoKI2RlZmluZSBwcmludF9ieXRlc19vZihhKSBwcmludF9ieXRlcygjYSwgYSkKCmludCBtYWluKCkKewogICAgZG91YmxlIGEgPSAwLjA7CiAgICBkb3VibGUgYiA9IC0wLjA7CiAgICAKICAgIHN0ZDo6Y291dCA8PCAiVmFsdWUgY29tcGFyaXNvbiIgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICIoYT09YikgPT4gIiA8PCAoYT09YikgIDw8c3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICIoYSE9YikgPT4gIiA8PCAoYSE9YikgIDw8c3RkOjplbmRsOwoKICAgIAogICAgc3RkOjpjb3V0IDw8ICJcblZhbHVlIHJlcHJlc2VudGF0aW9uIiA8PCBzdGQ6OmVuZGw7CiAgICBwcmludF9ieXRlc19vZihhKTsKICAgIHByaW50X2J5dGVzX29mKGIpOwp9