> void main ()
> {
>   float x = 1073741855;
>
>   printf ("%f\n", x);
>   cout << x;
> }
>
> and the out put on running is as follows
>
> 1073741824.000000
> 1.07374e+09
>
> What i want to know is that why am i not
> getting
> the o/p as  1073741855 .There is a difference
> of 31.What am i doing wrong?
The reason why u are not getting 1073741855, but 1073741824 is generally
attributed to floating point rounding off error. If u study the way floating
point numbers are stored internally, u will find that the representation is
not very accurate for integers. Here u have 10 significant digits, which is
a lot more than what you will require for most of the floating point
operations. If you need greater accuracy, then you can try out "double" &
"long double" datatypes.

PS: If i compile the above program under MS VC++ 6.0 sp5, the compiler gives
the following warning, which can give u a further explaination of the
problem!

warning C4305: 'initializing' : truncation from 'const int' to 'float'

changing the code to the following:
#include <iostream>    // This is typically preffered over iostream.h

#include <stdio.h>

int main(int argc, char* argv[])

{

double x = 1073741855.0; // Note that i have put a .0 at the end

/* In fact changing the above line to the following will also work w/o
warnings under vc++ 6.0 sp5

double x = 1073741855;

*/

printf ("%lf\n", x);  // Note the use of %lf in place of %f

std::cout << x; // since i am using iostream, i have to use std::

return 0;

}



gives this output under vc++ (as desired):

1073741855.000000
1.07374e+009






          ================================================
To subscribe, send email to [EMAIL PROTECTED] with subscribe in subject header
To unsubscribe, send email to [EMAIL PROTECTED] with unsubscribe in subject header
Archives are available at http://www.mail-archive.com/ilugd%40wpaa.org
          =================================================

Reply via email to