Это информатику надо учить, чтобы понять. Числа с запятой хранится в типах данных в 32 и 64 бита (float и double), и у этих типов данные есть соответственно 2^32 и 2^64 возможных состояний. В целых числах у каждого значения есть чёткое состояние. В плавающих числах эти состояния те же самые, что и в целых, но просто они как бы растянуты по алгебраическому представлению, из-за чего и страдает точность. Для примера, если в консоли сделать 1e128+1, то получите всё тоже 1e128 потому, как нету в типе данных такого состояния, которое могло хотя бы округлённо представлять 1e128+1. Даже более того -- если сделать 1e128+1e111, то этого тоже будет не достаточно для изменения состояния 1e128, но при уже 1e128+1e112 получится изменённое состояние : 1.0000000000000003e+128 Компьютер считает не арифметическими числами, а матричными состояниями битов информации.