#include <iostream>
#include <cmath>
#include <limits>
template <typename T1, typename T2>
double pow_bad(T1 base, T2 exp)
{
return std::exp( double(exp) * std::log(double(base)) );
}
int main()
{
using namespace std;
const int LENGTH = 15;
cout.precision(numeric_limits<double>::max_digits10);
for (int i = 1; i < LENGTH; i += 2)
{
double res = pow(i, 2);
cout << i << "^2.0 = " << res << " " << int(res) << endl;
}
cout << endl;
for (int i = 1; i < LENGTH; i += 2)
{
double res = pow_bad(i, 2);
cout << i << "^2.0 = " << res << " " << int(res) << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxsaW1pdHM+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgpkb3VibGUgcG93X2JhZChUMSBiYXNlLCBUMiBleHApCnsKCXJldHVybiBzdGQ6OmV4cCggZG91YmxlKGV4cCkgKiBzdGQ6OmxvZyhkb3VibGUoYmFzZSkpICk7Cn0KCmludCBtYWluKCkKewoJdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgljb25zdCBpbnQgTEVOR1RIID0gMTU7Cgljb3V0LnByZWNpc2lvbihudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXhfZGlnaXRzMTApOwoKCWZvciAoaW50IGkgPSAxOyBpIDwgTEVOR1RIOyBpICs9IDIpCgl7CgkJZG91YmxlIHJlcyA9IHBvdyhpLCAyKTsKCQljb3V0IDw8IGkgPDwgIl4yLjAgPSAiIDw8IHJlcyA8PCAiICIgPDwgaW50KHJlcykgPDwgZW5kbDsKCX0KCWNvdXQgPDwgZW5kbDsKCglmb3IgKGludCBpID0gMTsgaSA8IExFTkdUSDsgaSArPSAyKQoJewoJCWRvdWJsZSByZXMgPSBwb3dfYmFkKGksIDIpOwoJCWNvdXQgPDwgaSA8PCAiXjIuMCA9ICIgPDwgcmVzIDw8ICIgIiA8PCBpbnQocmVzKSA8PCBlbmRsOwoJfQoKCXJldHVybiAwOwp9