#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;
}