javafloating-accuracyfloating-point-precisiondouble-precision

Java float is more precise than double?


Code:

class Main {
    public static void main (String[] args) {
        System.out.print("float: ");
        System.out.println(1.35f-0.00026f);
        System.out.print("double: ");
        System.out.println(1.35-0.00026);
    }
}

Output:

float: 1.34974
double: 1.3497400000000002

??? float got the right answer, but double is adding extra stuff from no where, Why??

Isn't double supposed to be more precise than float?


Solution

  • A float is 4 bytes wide, whereas a double is 8 bytes wide.

    Check What Every Computer Scientist Should Know About Floating-Point Arithmetic

    Surely the double has more precision so it has slightly less rounding error.

    Squeezing infinitely many real numbers into a finite number of bits requires an approximate representation. Although there are infinitely many integers, in most programs the result of integer computations can be stored in 32 bits. In contrast, given any fixed number of bits, most calculations with real numbers will produce quantities that cannot be exactly represented using that many bits. Therefore the result of a floating-point calculation must often be rounded in order to fit back into its finite representation. This rounding error is the characteristic feature of floating-point computation.

    On a side note:-

    I would suggest if you want the exact decimal values then use java.math.BigDecimal