Re: [ROOT] discrepancies with floats

From: Brett Viren (bv@bnl.gov)
Date: Tue May 14 2002 - 17:14:29 MEST


Let me clarify something,

Brett Viren writes:
 > In C++ you can also use cout.setf() to switch to, eg., scientific
 > notation, but CINT doesn't apparently understand this(?).

Jacek Holeczek pointed out to me that cout.setf() does indeed work
under CINT, but just not as written in C++PL 3rd ed.  According to
this, one should do, for eg:

      cout.setf(ios_base::scientific,ios_base::floatfield);

but "ios_base" is undefined under CINT.  However, as Jacek pointed out
to me:

      cout.setf(ios::scientific);

etc, works just fine.

Here is the example:

// junk.C
#include <iostream>
void junk() {
   double x=1.0000007;
   if (x > 1.0) {
      cout << "Error: " << x << " value is not allowed" << endl;
      cout.precision(10);
      cout << "   or: " << x << " value is not allowed" << endl;
      cout.setf(ios::scientific);
      cout << "   or: " << x << " value is not allowed" << endl;
      cout.setf(ios_base::scientific,ios_base::floatfield);
      cout << "   or: " << x << " value is not allowed" << endl;
   }
}

root [0] .x junk.C
Error: 1 value is not allowed
   or: 1.0000007 value is not allowed
   or: 1.0000007000e+00 value is not allowed
Error: class,struct,union or type ios_base not defined  FILE:junk.C LINE:10
Error: class,struct,union or type ios_base not defined  FILE:junk.C LINE:10
Error: class,struct,union or type $ios_base not defined  FILE:junk.C LINE:10
Error: Symbol scientific is not defined in current scope  FILE:junk.C LINE:10
Error: class,struct,union or type ios_base not defined  FILE:junk.C LINE:10
Error: class,struct,union or type ios_base not defined  FILE:junk.C LINE:10
Error: class,struct,union or type $ios_base not defined  FILE:junk.C LINE:10
Error: Symbol floatfield is not defined in current scope  FILE:junk.C LINE:10
*** Interpreter error recovered ***



-Brett.



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:53 MET