Isso não é do Delphi especificamente. Toda linguagem de programação é assim armazenando apenas uma aproximação do número decimal (conhecido como ponto flutuante ou float).
Pense no seguinte: Quantos números reais existem entre 0 e 1?
Infinitos.
E entre 0,1 e 0,2?
Infinitos.
E entre 0,0000001 e 0,0000002?
Infinitos.
Mas a memória do seu computador é finita. Pior, a memória alocada para uma variável numérica é finita. Então é impossível expressar todos os números entre 0,1 e 0,2 com a memória alocada para um tipo. Quanto menos expressar todos os números reais...
Um artigo com explicação mais detalhada é o "What Every Computer Scientist Should Know About Floating-Point Arithmetic" por David Goldberg.
Já citei este artigo em outro tópico, juntamente com um link para uma pergunta relacionada no StackOverflow: