Чтобы не засорять тему конкурса напишу здесь.
В 2.996 нет ошибки в умножении, есть особенность преобразования дробных чисел из символьного представления в двоичное. В 2.5-2.995, как и в других микрософтовских бейсиках, при таком преобразовании каждая цифра после запятой в итоге приводит к отдельному делению на 10. Это компактный, но чудовищно медленный вариант. В 2.996 для ускорения используются деления не только на 10, но и на 100 и 1000. Так в разы быстрее, но появляется расхождение с микрософтом из-за того, что при каждом делении еще выполняется округление. Т.е. при делении 3 раза на 10 будет 3 округления, а при делении на 1000 только одно. Вариант 2.996 не только быстрее, но и точнее, т.к. лишние промежуточные округления только "портят" число.
Вернемся к RG2024LETO. Увидеть разницу в выполнении BEEP0.001 можно на таком примере PRINT INT(.001*1000)
2.5-2.995 напечатают 0
2.996 напечатает 1
2.996 точнее! Разница преобразования .001 в одном самом младшем бите мантиссы, который даже не видно при печати числа, но тут он сыграл. Отказываться от быстрого и более точного преобразования дробных чисел я не буду, но т.к. есть разница с классикой, то это еще один аргумент в пользу отделения таких бейсиков в отдельную ветку.




Ответить с цитированием