"C++ Newbie" <newbie.cpp@[EMAIL PROTECTED]
> wrote in message
news:b6b912f8-2a76-4eed-b9dc-8ab1901637a8@[EMAIL PROTECTED]
> In a C++ exercise, I was asked to find the precision of the variable
> types float, double and long double.
>
> I did it by dividing a starting number by 2 continuously until a
> logical test detected if there was no discernible difference between
> successive numbers. Is there a better way to do this?
>
> #include <iostream>
> #include <fstream>
>
> using std::cout;
> using std::cin;
> using std::fstream;
> using namespace std;
don't need namespace std; if you are using
using std::/..../;
>
>
> int main()
> {
> fstream myfile;
need ofstream myfile:
> myfile.open ("float_test.txt", ios::out);
Just need "float_test.txt");
> myfile << "floating point number precision test.\n";
> int active = 0;
> float buffer = 1000, float_test = 100, buffer1 = -1;
> while (active == 0)
> {float_test = float_test/2.;
> if (buffer == float_test)
> {
> cout << "Lowest float precision is: " << buffer1 << "\n";
> system ("tail -2 float_test.txt | head -1 > temp.txt");
> myfile.close();
> break;
> }
> if (buffer > float_test)
> {//cout << float_test << "\n";
> myfile << float_test << "\n";
> buffer1 = buffer;
> buffer = float_test;}
> }
>
> fstream myfile_d;
> myfile_d.open ("double_test.txt");
> myfile_d << "double precision test.\n";
> active = 0;
> double dbuffer = 1000, double_test = 100, dbuffer1 = -1;
> while (active == 0)
> {double_test = double_test/2.;
> if (dbuffer == double_test)
> {
> cout << "Lowest double precision is: " << dbuffer1 <<
> "\n";
> system ("tail -2 float_test.txt | head -1 >
> temp.txt");
> myfile_d.close();
> break;
> }
> if (dbuffer > double_test)
> {//cout << double_test << "\n";
> myfile_d << double_test << "\n";
> dbuffer1 = dbuffer;
> dbuffer = double_test;}
> }
>
> fstream myfile_ld;
> myfile_ld.open ("ldouble_test.txt");
> myfile_ld << "long double number precision test.\n";
> active = 0;
> long double ldbuffer = 1000, ldouble_test = 100, ldbuffer1 = -1;
> while (active == 0)
> {ldouble_test = ldouble_test/2.;
> if (ldbuffer == ldouble_test)
> {
> cout << "Lowest long double precision is: " <<
> ldbuffer1 << "\n";
> system ("tail -2 float_test.txt | head -1 >
> temp.txt");
> myfile_ld.close();
> break;
> }
> if (ldbuffer > ldouble_test)
> {//cout << ldouble_test << "\n";
> myfile_ld << ldouble_test << "\n";
> ldbuffer1 = ldbuffer;
> ldbuffer = ldouble_test;}
> }
>
> }
I don't know the problem you are working on, but I can give it better form
from what you have. I derive the same result for float.
#include <iostream>
#include <fstream>
using std::cout;
using std::cin;
using std::ios;
using std::ofstream;
int main()
{
ofstream myfile;
myfile.open ("precision_test.txt" );
myfile << "floating point number precision test."<< std::endl;
float ff = 1000, buffer = 0;
while(ff > 0)
{
buffer = ff;
ff = ff/2; // 2 or 99
if(ff == 0)
{
std::cout << "Lowest is " << buffer << std::endl;
myfile << buffer << std::endl;
}
}
myfile<< "double number precision test."<< std::endl;
double fd = 1000,buffer1 = 0;
while(fd > 0)
{
buffer1 = fd;
fd = fd/2;
if(fd == 0)
{
std::cout << "Lowest is " << buffer1 << std::endl;
myfile << buffer1 << std::endl;
}
}
myfile.close();
}
Jeff
--
[ See http://www.gotw.ca/resources/clcm.htm
for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]


|