Компилятор рисует предупреждение что float 100 может быть не равен double 100 (1e2)
При сравнении двух величин он преобразовывает float в double. При этом возникает маленькая погрешность. Вот она и влияет на результат.
Читайте об этом про числа с плавающей запятой. Заодно поймете почему иногда 2-1 = 0.9999999999999999999 )
ну так наверное 1 + 5 то будет 6? подумал я но тут пришло осознание что с логикой у вас все нормально, а вот с float не очень - посмотрите что такое 0.01 на самом деле (в режиме отладки - просто перед запуском из под визуалки (или в чем вы там) тыкните слева от номеров строки там дожен красный кружочек появиться - это точка приостановки выполения кода) поймете в чем дело и это базовая проблема float
а чож мы указали .01 а не 1e-2? чот как то не консистентно, фи такой быть