Problemas com flutuadores no Objective-C

Eu tenho um pequeno problema e não consigo encontrar uma solução!

Meu código é (isso é apenas um exemplo de código, mas meu código original faz algo assim):

float x = [@"2.45" floatValue]; for(int i=0; i<100; i++) x += 0.22; NSLog(@"%f", x); 

a saída é 52.450001 e não 52.450000!

Eu não sei porque isso acontece!

Obrigado por qualquer ajuda!

~ RESOLVIDO ~

Obrigado a todos! Sim, resolvi com o tipo duplo!

Flutuadores são uma representação numérica com uma certa precisão. Nem todo valor pode ser representado nesse formato. Veja aqui também.

Você pode facilmente pensar em por que este seria o caso: há um número ilimitado de números apenas no intervall (1..1), mas um float tem apenas um número limitado de bits para representar todos os números em (-MAXFLOAT .. MAXFLOAT).

Mais apropriadamente colocar: em uma representação inteira de 32 bits, há um número contável de inteiros para ser representado, mas há um número infinito de inúmeros valores reais que não podem ser totalmente representados em uma representação limitada de 32 ou 64 bits. Portanto, não existe apenas um limite para o valor real representável mais alto e mais baixo, mas também para a precisão.

Então, por que um número que tem poucos dígitos após o ponto flutuante é afetado? Porque a representação é baseada em um sistema binário em vez de um decimal, tornando outros números facilmente representados, em seguida, os decimais.

Os números de ponto flutuante nem sempre podem ser representados facilmente pelos computadores. Isso leva a uma imprecisão em alguns dígitos.

É como se eu estivesse perguntando o que 1/3 é em decimal. Não importa o quanto você tente, você não será capaz de me dizer o que é porque o decimal não pode descrever com precisão esse número.

Flutuadores não podem descrever com precisão alguns números decimais.