Search code examples
c++mathdouble

double and accuracy


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?


Solution

  • 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.