/*
Outputting the number of decimal significant figures supported by each floating point type in C++.
Author: Peter R. Bloomfield.
Web: avidinsight.uk
*/

#include <iostream>
#include <limits>
#include <cmath>
using namespace std;

template <typename T_ty>
void test()
{
	int radix = numeric_limits<T_ty>::radix;
	int mantissa = numeric_limits<T_ty>::digits;
	int figures = static_cast<int>( std::ceil(
		mantissa * std::log(radix) / std::log(10.0)
	));
	
	cout << " Mantissa contains " << mantissa << " base " << radix << " digits" << endl;
	cout << " Significant decimal figures = " << figures << endl;
	cout << endl;
}

int main() {
	cout << "float:" << endl;
	test<float>();
	
	cout << "double:" << endl;
	test<double>();
	
	cout << "long double:" << endl;
	test<long double>();
	return 0;
}