É fácil se deparar com as limitações do double no Java e na maioria das outras linguagens: quando vamos trabalhar com dinheiro notamos que as contas não estão saindo exatamente como esperávamos:
double d1 = 0.1; double d2 = 0.2; System.out.println(d1 + d2);
O resultado é um estranho 0.30000000000000004, que pode acarretar em problemas graves dependendo da utilização e arrendondamento aplicado depois nesse número. O problema é que um número com 0.1 não pode ser representado em binário de maneira finita: ele vira uma dízima (no binário ficaria algo como ...) diferente do número , que pode ser representado perfeitamente (no binário ). A representação é um pouco mais complicada que isso, para trabalhar com números de ponto flutuante.