Почему точность вычислений в float нарушается для чисел определённой степени двойки?
Да, точность чисел с плавающей запятой не гарантирована. Почитайте статью на википедии, она вполне адекватна.
Не считайте деньги в плавающих числах :)
Связано, вероятно, с особенностями перевода дробных чисел в текст. Я попробовал повторить на Си++, ничего интересного не вышло. Зато методы перевода дробного в текст G++ и GRISU дают несколько разные результаты.