Diferentes valores para float y double.

No entiendo por qué los valores flotantes son diferentes de los valores dobles. A partir del ejemplo de abajo, parece que float proporciona un resultado diferente al doble para la misma operación:

public class Test {

    public static void main(String[] args) {
        double a = 99999.8d;
        double b = 99999.65d;
        System.out.println(a + b);

        float a2 = 99999.8f;
        float b2 = 99999.65f;
        System.out.println(a2 + b2);
    }
}

Salida:

199999.45
199999.44

¿Puedes explicar qué hace esta diferencia entre flotar y doblar?

Respuestas a la pregunta(5)

Su respuesta a la pregunta