Очень упрощенно: в компьютере нет десятичных дробей. Вообще так повелось что у тебя есть куча ячеек где 0 или 1. И вот чтобы записывать десятичные дроби придумали стандарт ieee754. В нем дроб представляется как
(-1)^знак * 2^(экспонента-127)*(1.дробная часть)(В деталях тут:
https://en.m.wikipedia.org/wiki/Single-precision_floating-point_format)
Вот размеры дробной части и экспоненты отличаются в float32 и 64. Но из за такого странного формата даже простые конвертации как у тебя превращаются в странное. Да и в целом даже 1+1 может быть не равно 2. :)
И это в целом считается нормальным и если нужна идеальная точность, то предлагается делать разные хаки например самому выделить дробую часть и хранить все в интах. Ну или смирится с таким поведением и везде где надо ввести понятие точности и делать операции с учётом точности.