Как ускорить вычислительные процессы программы? - QBasic
Формулировка задачи:
Чтобы сделать быструю программу, в которой много вычислений,
Надо по возможности не делать эти вычисления в самой
программе, а вставить в программу уже готовые значения.
Вот яркий пример:
Требуется вычислить sin1° + sin2° + ... + sin90°
Чтобы определить затраченное время, в программе эти вычисления
повторяются 100 000 раз.
Для сравнения смотрите вторую программу, которая делает тоже
самое, но все синусы вычислены заранее
Программа 2 (соперник)
Время выполнения первой программы = 85 сек
Время выполнения второй программы = 55 сек
Как видите вторая программа выполняется
быстрее первой в 1,5 раза
Желая узнать какого эффекта можно достигнуть
если взять функцию чуть сложнее, не меняя самой
программы, я использовал следующую функцию:
SIN(i / 180 * 3.141592) + LOG(i) - LOG(i)
(по сути та же задача, логарифмы в нагрузку)
Время вычисления составило 169 сек - в ТРОЕ (!!)
больше, чем у программы (55 сек), где все сосчитано.
Пусть каждый сделает для себя вывод ....
Успехов всем!
Решение задачи: «Как ускорить вычислительные процессы программы?»
textual
Листинг программы
DEFSNG S, X DEFLNG I, N CLS DIM sn(1 TO 90) FOR i = 1 TO 90 sn(i) = SIN(i / 180 * 3.141593) NEXT i FOR n = 1 TO 100000 s = 0 FOR i = 1 TO 90 s = s + SN(i) NEXT i NEXT n PRINT s END
Объяснение кода листинга программы
В этом коде на языке QBasic выполняется следующее:
- Установка значений переменных:
- Установка константы
S
(вероятно, это значение не меняется в ходе выполнения программы). - Установка константы
X
(вероятно, это значение не меняется в ходе выполнения программы). - Установка счётчика
I
для цикла. - Установка счётчика
N
для цикла.
- Установка константы
- Инициализация массива:
- Объявление массива
sn(1 TO 90)
(возможно, это массив для хранения результатов вычислений). - Заполнение массива
sn
значениями синуса от 0 до 90 градусов с шагом 1 градус (предполагается, что функцияSIN
доступна и возвращает значение синуса).
- Объявление массива
- Вычисление суммы:
- Установка начального значения переменной
s
равным 0. - Цикл по индексам массива
sn
. - Приращение значения переменной
s
на значение элемента массиваsn(i)
.
- Установка начального значения переменной
- Повторение вычислений:
- Цикл, выполняющийся 100 000 раз (возможно, это нужно для получения более точного результата).
- Внутри цикла - повторение вычисления суммы.
- Вывод результата:
- Вывод значения переменной
s
(вероятно, это сумма синусов).
- Вывод значения переменной
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д