I just wonder:
When I run this program, why is it that the result is a little incorrect ?
Like 0.2 * 1 == 0.20000000000000001
and
0.2 * 2 == 0.40000000000000002
Printable View
I just wonder:
When I run this program, why is it that the result is a little incorrect ?
Like 0.2 * 1 == 0.20000000000000001
and
0.2 * 2 == 0.40000000000000002
Why not tell the compiler to show the decimal two spaces from the decimal point using set precision?
Code:#include <iostream>
using std::fixed;
using std::cout;
#include <iomanip>
using std::setprecision;
int main ( void )
{
double val = 5.5;
double res = val + val;
cout << Result: " << fixed << setprecision( 2 ) << res;
return 0;
}
Hi swgh
Sure I could !
But that didn't answer the question... ;-)
regards,
The SharK
Floating point numbers in computers are never going to be infinitely precise. To have that level of precision would require unlimited memory. If my memory is right, single-precision numbers are accurate to seven decimal places while double-precision are accurate to fifteen.
I see, thanks Frobozz ;-)
Single precision is 24 bits of precision (including leading 1) while double is 53, which yes, works out to about 7 and 15 decimal places
And that's all the accuracy computers provide us :(
http://en.wikipedia.org/wiki/IEEE_fl...point_standard
Especially read David Goldberg's paper at the end
You could use BCD instead of binary if you want decimal precision ie. storing the number as base 10 digits instead of base 2 bits.
That doesn't eliminate the problem. Try to compute 1/7 (as a real value, not using integer arithmetic) and store than within a finite number of decimal places.Quote:
Originally Posted by jafet