Важная информация

User Tag List

Страница 64 из 64 ПерваяПервая ... 6061626364
Показано с 631 по 637 из 637

Тема: Бейсики для Вектора-06Ц и клонов

  1. #631
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,222
    Спасибо Благодарностей отдано 
    938
    Спасибо Благодарностей получено 
    707
    Поблагодарили
    437 сообщений
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    А выигрыш за счет
    1) Парсинг NEXT быстрее, чем GOTO+номер
    2) Адрес начала цикла в NEXT сохранен FORом и сразу переходим куда надо. В GOTO надо еще найти строку (если речь не о модернизированном бейсике и если номер не совпал с "кешем").
    Вот тут мне надо еще раз. В твоем примере я NEXT не вижу. Это какой-то неявный NEXT?
    Больше игр нет

  2. Эти 2 пользователя(ей) поблагодарили svofski за это полезное сообщение:

    ivagor (05.02.2025), metamorpho (05.02.2025)

  3. #631
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  4. #632
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,144
    Спасибо Благодарностей отдано 
    717
    Спасибо Благодарностей получено 
    2,126
    Поблагодарили
    1,202 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо, я умудрился скопировать хвост варианта NEXT из варианта GOTO, а правильный вариант такой
    1 REM
    10 REM
    100 REM
    199 FORI=.TO1STEP.:GOTO234
    200 REM
    234 REM
    999 NEXT

  5. Эти 2 пользователя(ей) поблагодарили ivagor за это полезное сообщение:

    metamorpho (05.02.2025), svofski (05.02.2025)

  6. #633
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,222
    Спасибо Благодарностей отдано 
    938
    Спасибо Благодарностей получено 
    707
    Поблагодарили
    437 сообщений
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Можно ускорить подобные циклы используя FOR:
    1 REM
    10 REM
    100 REM
    199 FORI=.TO1STEP.:GOTO234
    200 REM
    234 REM
    999 GOTO199
    Можно еще исправить оригинальное сообщение, чтобы было проще тем, кто найдет это потом когда-нибудь.
    И я все-таки не до конца понял что делает GOTO234 в варианте с FOR. Что если я просто напишу FORI=.TO1STEP. без :GOTO234 ?
    Больше игр нет

  7. #634
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,144
    Спасибо Благодарностей отдано 
    717
    Спасибо Благодарностей получено 
    2,126
    Поблагодарили
    1,202 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    Можно еще исправить оригинальное сообщение, чтобы было проще тем, кто найдет это потом когда-нибудь.
    Не хотел там править, чтобы было понятен последующий диалог. Сейчас поправил, надеюсь с разными датами исходного сообщения и правки будет понятнее.
    Цитата Сообщение от svofski Посмотреть сообщение
    И я все-таки не до конца понял что делает GOTO234 в варианте с FOR. Что если я просто напишу FORI=.TO1STEP. без :GOTO234 ?
    Могу только повторить, что для варианта с 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 всегда быстрее.
    Ну и я уже писал, что при частом использовании числа большой (по модулю) степени и/или с большим количеством знаков после запятой его выгоднее присвоить переменной и пользоваться ей.

  8. Этот пользователь поблагодарил ivagor за это полезное сообщение:

    metamorpho (06.02.2025)

  9. #635
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,222
    Спасибо Благодарностей отдано 
    938
    Спасибо Благодарностей получено 
    707
    Поблагодарили
    437 сообщений
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Могу только повторить, что для варианта с GOTO199 это перебивание кеширования номера строки в 2.996, чтобы лучше соответствовало реальным программам, у которых внутри циклов бывают переходы.
    Понятно. То есть это попытка приблизить бенчмарк к реальности, а не часть рекомендованного паттерна. Тебе наверное трудно в это поверить, но это совершенно не очевидно. Это выглядит в контексте примера как какой-то особый трюк, который позволяет все разогнать в два раза. По-моему совсем не вредно такие примеры подробно документировать.
    Больше игр нет

  10. Этот пользователь поблагодарил svofski за это полезное сообщение:

    metamorpho (06.02.2025)

  11. #636
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,144
    Спасибо Благодарностей отдано 
    717
    Спасибо Благодарностей получено 
    2,126
    Поблагодарили
    1,202 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Согласен, надо было четче разграничить суть и дополнительные бантики.
    Суть простая - в "бесконечных" циклах вместо
    GOTO назад
    быстрее делать так
    FORI=.TO1STEP.
    ...
    NEXT
    Переменная I выбрана случайным образом, можно использовать и другие буквы.

  12. Эти 3 пользователя(ей) поблагодарили ivagor за это полезное сообщение:

    Improver (07.02.2025), metamorpho (06.02.2025), svofski (06.02.2025)

  13. #637
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,144
    Спасибо Благодарностей отдано 
    717
    Спасибо Благодарностей получено 
    2,126
    Поблагодарили
    1,202 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В msbasicах (даже версий 5.x) нет команды досрочного прерывания цикла FOR...NEXT, но есть как минимум два варианта, как это сделать.
    1. Очевидный.
    Если мы проверили внутри цикла некое условие и оказалось, что надо цикл прервать, то присваиваем переменной цикла конечное значение и переходим на NEXT.
    Строго говоря можно взять значение чуть меньше, главное чтобы (это значение+шаг цикла)>конечное значение. Это может иметь смысл, например если конечное значение дробное, а мы хотим для краткости и скорости использовать целое.
    2. Менее очевидный. Годится при наличии вложенных циклов.
    Если нам надо досрочно окончить внутренний цикл, то делаем переход за пределы внутреннего NEXT. Главное - надо в NEXT внешнего цикла обязательно добавить имя переменной этого цикла.
    NEXT с указанием переменной сбросит со стека "лишнее" и дойдет до своей переменной. Особенно эффективен этот вариант для прерывания сразу нескольких внутренних циклов с выходом во внешний.
    Вариант 1 при наличии вложенных циклов тоже годится, но скорее всего вариант 2 будет чуть быстрее, хотя лучше проверять конкретные случаи.

  14. Этот пользователь поблагодарил ivagor за это полезное сообщение:

    metamorpho (08.02.2025)

Страница 64 из 64 ПерваяПервая ... 6061626364

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Похожие темы

  1. Картотека ПО для Вектора-06ц
    от svofski в разделе Вектор
    Ответов: 719
    Последнее: 04.04.2024, 11:13
  2. Восстановление Вектора-06ц
    от Daniil Chislov 86 в разделе Вектор
    Ответов: 100
    Последнее: 11.03.2021, 00:23
  3. Ответов: 198
    Последнее: 26.04.2020, 13:05
  4. Ответов: 58
    Последнее: 06.07.2019, 23:56
  5. Ответов: 8
    Последнее: 14.11.2008, 02:41

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •