Часть проблемы заключается в том, что 0.33 не имеет точного представления в базовом формате, потому что оно не может быть выражено серией 1/2 n терминов. Таким образом, при умножении на 10 число, немного отличающееся от 0.33 , умножается.
В этом отношении 3.3 также не имеет точного представления.
Часть первая
Когда числа не имеют точного представления в виде основания-10, при преобразовании наименее значащей цифры, для которой была информация в мантиссе, будет остаток. Этот остаток будет распространяться вправо, возможно, навсегда, но это в значительной степени бессмысленно. Кажущаяся случайность этой ошибки обусловлена той же самой причиной, которая объясняет, по-видимому, непоследовательное округление, которое вы заметили, и Matchu заметил. Это во второй части.
Часть вторая
И эта информация (самые правые биты) не выровнена аккуратно с информацией, передаваемой одной десятичной цифрой, поэтому десятичная цифра, как правило, будет несколько меньше, чем ее значение, если бы исходная точность была выше.
Вот почему преобразование может округляться до 1 с 15 цифрами и до 0.x с 16 цифрами: потому что более длинное преобразование не имеет значения для битов справа от конца мантиссы.