28 FreeBASIC - Время выполнения программы. Работа с таймером. Оптимизируем поиск простых чисел
Ни на копейку не оптимизировал прошлый раз задачу поиска простых чисел. Сейчас мы займёмся этой не лёгкой работой. И хотелось бы реально увидеть результат оптимизации - "стало быстрее в n раз"
Но для начала нужно измерить время исполнения той программы что есть.
Мы уже использовали timer в команде randomize timer. Здесь же по этому таймеру будем измерять время выполнения кода.
Зафиксируем значение таймера до выполнения.. и после - разность и будет временем выполненя участка программы.
Вначале проэкспериментируем немного с таймером.
Измерим несколько раз время выполнения команды sleep - паузы в 1000 мс (секунда)
dim st as double
dim i as integer
for i =1 to 9
st =timer()
sleep 1000
print timer() - st
print "---------------------"
next i
sleep
И уже есть представление о точности - далее третьего знака не лезть)))
Запустил на домашнем компьютере (редактирую-дописываю пост) чуть иная картина
Операция деления для компьютера крепкий орешек был, во всяком лучае на первых ЭВМ,калькуляторах она в несколь раз давалась тяжелее
dim as double st, a
dim as integer i, j
a=99999999
for i =1 to 9
st =timer()
for j=1 to 100000:a=a/3:next j
print timer() - st
print "---------------------"
next i
sleep
Ну и быстродействие..в пресчёте на секунду - 100 млн операций деления. И точность четыре знака после запятой.
Производительность дома - почти в два раза быстрее...
Возвращаемся к простым числам
Измерим время нахождения хх чисел - в двух вариантах: с выводом на экран и без него.
Вот код из прошлого примера
'''
dim as integer f
dim as longint i, k
for k=2 to 1000
f=0
for i=2 to k-1
if k mod i = 0 then f=1
next i
if f=0 then print k;
next k
sleep
'''
добавляем
'''
...
dim as double st
st=timer()
...
st=st-timer()
print
print st
sleep
'''
с выводом | без вывода | |
---|---|---|
без оптимизации | 46.26 | 43.83 |
если нашли делитель - exit for | 6.91 | 3.95 |
sqr(k) | 2.24 | 0.028 |
Вывод занимает чуть более 2 секунд, и не зависит от оптимизаций - логично ведь на вывод идёт одинаковое количество чисел.
А время расчётов уменьшилось в 20 раз.
Поиск простых чисел до миллиона занимает чуть больше чем половина секунды)))