Ещё вариант: IF HI(X1) AND 255 THEN
Ещё вариант: IF HI(X1) AND 255 THEN
Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
В линейке 2.5 такой функции нет.
Можно еще учесть симметрию фигуры и границ.
metamorpho(25.12.2024)
Твистер на бейсике, душераздирающее зрелище. Надо конечно делать на асме, но если не хочется, то можно воспользоваться мощью современных эмуляторов. В Emu80 (начиная с 4.0.498) LAlt+PgUp пока не станет приемлемо. В Emu можно удерживать F9.
Upd: twister6 совместим и с режимом 12 МГц в VV (F10).
Последний раз редактировалось ivagor; 08.01.2025 в 23:15. Причина: twister6
Improver(10.01.2025), metamorpho(09.01.2025)
Ускорил как смог. Здесь аж двухбайтная машиннокодовая процедура, поэтому twister6 (где только бейсик) тоже оставил.
Improver(10.01.2025), metamorpho(10.01.2025), svofski(10.01.2025)
Округление в клонах msbasic (наверняка где-то уже было)
A=SGN(A)*INT(ABS(A)+.5)
metamorpho(05.02.2025)
В программах иногда используются "бесконечные" циклы с заранее неизвестным числом повторений (может быть реализован выход из цикла по проверке некоторых условий, этот момент я не трогаю).
Как правило для зацикливания в таких случаях используется GOTO назад, например:
1 REM
10 REM
100 REM
199 GOTO234
200 REM
234 REM
999 GOTO199
basic 2.5 - 7900 тактов на итерацию
basic 2.996 - 4100 тактов на итерацию
Можно ускорить подобные циклы используя FOR:
1 REM
10 REM
100 REM
199 FORI=.TO1STEP.:GOTO234
200 REM
234 REM
999 GOTO199 - ошибка, в этой строке должно быть 999 NEXT
basic 2.5 - 5760 тактов на итерацию
basic 2.996 - 2828 тактов на итерацию
Выигрыш очевиден, причем если перед строкой начала цикла (199 в примере) будет больше других строк, то вариант с GOTO будет еще замедляться, а на FOR это не влияет.
В модернизированных бейсиках есть еще один потенциальный плюс - FOR не перебивает кеширование переходов, если они используются и внутри цикла, как в приведенном примере (поэтому в 2.996 относительный выигрыш больше).
Последний раз редактировалось ivagor; 06.02.2025 в 17:03. Причина: подсветил свою ошибку
metamorpho(05.02.2025)
Не хотел там править, чтобы было понятен последующий диалог. Сейчас поправил, надеюсь с разными датами исходного сообщения и правки будет понятнее.
Могу только повторить, что для варианта с GOTO199 это перебивание кеширования номера строки в 2.996, чтобы лучше соответствовало реальным программам, у которых внутри циклов бывают переходы.
Узкоспецифический вопрос - какой вариант записи дробных чисел быстрее для парсинга и преобразования во внутреннее представление?
В 2.5 A=.1 или A=.9 быстрее, чем A=1E-1 или A=9E-1. Но при наличии нулей после запятой вариант с E становится предпочтительнее: A=1E-2 или A=9E-2 быстрее, чем A=.01 или A=.09.
В 2.996 вариант с E всегда быстрее.
Ну и я уже писал, что при частом использовании числа большой (по модулю) степени и/или с большим количеством знаков после запятой его выгоднее присвоить переменной и пользоваться ей.
metamorpho(06.02.2025)
Понятно. То есть это попытка приблизить бенчмарк к реальности, а не часть рекомендованного паттерна. Тебе наверное трудно в это поверить, но это совершенно не очевидно. Это выглядит в контексте примера как какой-то особый трюк, который позволяет все разогнать в два раза. По-моему совсем не вредно такие примеры подробно документировать.
Больше игр нет
metamorpho(06.02.2025)
Объясни, пожалуйста, почему добавление лишних операторов что-то ускоряет и почему нельзя было просто написать 999 GOTO234 -- в чем смысл 199 GOTO234 ?
Больше игр нет
metamorpho(05.02.2025)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)