#include <iostream>
#include <iomanip>
#include <limits>

int main()
{
  using namespace std;
  cout<<"type  "<<"# bits  minimum      maximum value"<<endl;
  cout<<"char:    "<<numeric_limits<char>::digits+1<<" "<<numeric_limits<char>::min()<<" "<<numeric_limits<char>::max()<<endl;
  cout<<"int:     "<<numeric_limits<int>::digits+1<<" "<<numeric_limits<int>::min()<<" "<<numeric_limits<int>::max()<<endl;
  cout<<"long:    "<<numeric_limits<long>::digits+1<<" "<<numeric_limits<long>::min()<<" "<<numeric_limits<long>::max()<<endl;
  cout<<"double:  "<<numeric_limits<double>::digits<<" "<<numeric_limits<double>::digits10<<" "<<numeric_limits<double>::radix<<" "<<numeric_limits<double>::min()<<" "<<numeric_limits<double>::max()<<endl;
  
  cout<<endl<<" Test of error:  1 + epsilon - 1 "<<endl;
  for (int i=1; i<=20; i++){
    double a = 1;
    double b = pow(10.,-i);
    double c = a+b;
    double d = c-a;
    cout<<setw(16)<<b<<" "<<setw(16)<<a<<" "<<setw(16)<<d<<endl;
  }
  return 0;
}
