Representações inesperadas de ponto flutuante em Python

Olá estou usando um dicionário em Python armazenando algumas cidades e sua população assim:

population = { 'Shanghai' : 17.8, 'Istanbul' : 13.3, 'Karachi' : 13.0, 'mumbai' : 12.5 }

Agora, se eu usar o comandoprint population, Eu obtenho o resultado:

{'Karachi': 13.0, 'Shanghai': 17.800000000000001, 'Istanbul': 13.300000000000001, 'mumbai': 12.5}

Considerando que, se eu usar o comandoprint population['Shanghai'] Eu recebo a entrada inicial de17.8.

Minha pergunta para você é como o17.8 e a13.3 se tornou17.800000000000001 e13.300000000000001 respectivamente? Como toda essa informação foi produzida? E por que é armazenado lá, desde que minha entrada inicial denota que eu não preciso daquela informação extra, pelo menos tanto quanto eu sei.

questionAnswers(3)

yourAnswerToTheQuestion