Using long double
I get 18/19 = 0.947368421052631578...
, and 947368421052631578
is the repeating decimal. Using double
I get 0.947368421052631526...
However, the former is correct. Why such an incorrect result?
Thanks for help.
Using long double
I get 18/19 = 0.947368421052631578...
, and 947368421052631578
is the repeating decimal. Using double
I get 0.947368421052631526...
However, the former is correct. Why such an incorrect result?
Thanks for help.
You're trying to represent every decimal number with a finite amount of bits. Some things just aren't expressible exactly in floating point. Expecting exact answers with floats is your first problem. Take a look at What Every Computer Scientist Should Know About Floating-Point Arithmetic
Here's a summary from some lecture notes:
A
double
which is usually implemented with IEEE 754 will be accurate to between 15 and 17 decimal digits. Anything past that can't be trusted, even if you can make the compiler display it.A
double
typically provides 16(±1) decimal digits. Your example shows this:The answers agree to 16 digits. This is what should be expected. Also note that there's no guarantee in the C Standard that a
long double
has more precision than adouble
.