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?
A double
typically provides 16(±1) decimal digits. Your example shows this:
4 8 12 16
v v v v
0.947368421052631578 long double
0.947368421052631526 double
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 a double
.
The last decimal digit (16th or 17th) is not necessarily accurate after math operations (at least not in all implementations and platforms); hence, limit your code to 15 digits.