Os números de ponto flutuante não podem representar exatamente a maioria dos números decimais, portanto, ao digitar um literal de ponto flutuante, você realmente obtém uma aproximação desse literal. A aproximação pode ser maior ou menor que o número digitado.
Você pode ver o valor exato de um número de ponto flutuante convertendo-o para decimal ou fração.
>>> from decimal import Decimal
>>> Decimal(0.01)
Decimal('0.01000000000000000020816681711721685132943093776702880859375')
>>> from fractions import Fractio
>>> Fraction(0.01)
Fraction(5764607523034235, 576460752303423488)
Podemos usar o tipo Fraction para encontrar o erro causado por nosso literal inexato.
>>> float((Fraction(1)/Fraction(0.01)) - 100)
-2.0816681711721685e-15
Também podemos descobrir como são os números de ponto flutuante de precisão dupla granular em torno de 100 usando nextafter from numpy.
>>> from numpy import nextafter
>>> nextafter(100,0)-100
-1.4210854715202004e-14
A partir disso, podemos supor que o número do ponto flutuante mais próximo 1/0.01000000000000000020816681711721685132943093776702880859375seja de fato exatamente 100.
A diferença entre 1//0.01e int(1/0.01)é o arredondamento. 1 // 0,01 arredonda o resultado exato para o próximo número inteiro em uma única etapa. Então, obtemos um resultado de 99.
int (1 / 0,01), por outro lado, arredonda em dois estágios, primeiro arredonda o resultado para o número de ponto flutuante de precisão dupla mais próximo (que é exatamente 100), depois arredonda esse número de ponto flutuante para o próximo número inteiro (que é novamente exatamente 100).