Цитата(_Алекс @ Feb 14 2017, 07:21)
При делении 251 на 10, вроде должно быть 25.1, а получается 25.0999995.
Кому должно? не должно оно никому. Почитайте представление чисел в float'e, поймете- там величина всегда неточная, она просто в заданном точностью диапазоне. Кстати, по этой же причине грубой ошибкой является попытка проверить float на равенство чему-то.
У Вас просто проявилась накопленная во время вычислений (всех вычислений, а не только последнего!) ошибка.
Собственно Вы сами уже ответили на свой вопрос:
Цитата(_Алекс @ Feb 14 2017, 07:21)
Если float поменять на double, работает.
...
Понято, что происходит потеря точности.
Вас смутило что "
Код в другой среде, работает и с float.". Скорее всего, в этой "другой среде" (уж не Матлаб ли?) оно приводится к длинному представлению и в нем считается, вот и все.
Эти ошибки представления не такой очевидный факт. Я лет 15 назад пытался это же объяснить девушке (Программистка, только что окончила Московский Энергетический, очень круто было в наших краях), у нее была ошибка: если она кучу коротких данных (импульсы от счетчиков) преобразовывала в киловатт-часы, то месячная сумма этих коротких величин не сходилась с данными, показанными по барабану счетчика (конец минус начало интервала наблюдения). Причем если взять сумму импульсов за месяц и преобразовать в киловатты, то с барабаном совпадало.
Она так и не поняла про точность вычислений, у нее же писи и фокспро, они всегда точно считают. Думала что я над ней так прикалываюсь.
И не бойтесь использовать дабл, ничего страшного в нем нет.
Upd:
вот первое попавшееся неплохое описание вопроса. Например, интересен пункт "4.2 Неассоциативность арифметических операций", но там много и другого интересного про подводные камни плавающей точки.