Почему точность вычислений в float нарушается для чисел определённой степени двойки?
Здравствуйте! Может ли кто-то рассказать про работу чисел с плавающей точкой?
Пример следующий:
_.range(0,2050).map(i => (i + 0.99) * 100);
Почему при подобном вычислении проблемы с точностью возникают для групп чисел, начинающихся со степени двойки? Первая группа начинается с 16, вторая – с 64, и третья – с 2048. Я понимаю, что точность вычислений для float не гарантирована, но почему в данном случае она проявляется именно таким образом? Просто любопытно.
Связано, вероятно, с особенностями перевода дробных чисел в текст. Я попробовал повторить на Си++, ничего интересного не вышло. Зато методы перевода дробного в текст G++ и GRISU дают несколько разные результаты.