Форум программистов, компьютерный форум CyberForum.ru

Время выполнения программы равно нулю - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
01.12.2012, 00:15     Время выполнения программы равно нулю #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    clock_t start, end;
    float i;
 
    start = clock();
 
   for(i=1;i<60000;i++);
    
    end = clock();
 
    printf("Time %.29f \n", ((double) end - start));
    getchar();
    return 0;
}
Программа должна выводить время выполнения цикла for(i=1;i<60000;i++). Почему выводит 0? И как это исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,094
01.12.2012, 00:23     Время выполнения программы равно нулю #2
Есть два варианта: либо компилятор просто выкинул пустой цикл при оптимизации, либо цикл выполняется быстрее, чем происходит тик системного таймера.
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
01.12.2012, 00:25  [ТС]     Время выполнения программы равно нулю #3
Да,цикл выполняется быстрее, например при 60000000 ответ уже не равен 0. Но мне нужно именно 60000.
__Александр__
7 / 10 / 0
Регистрация: 17.09.2012
Сообщений: 191
Записей в блоге: 2
01.12.2012, 00:32     Время выполнения программы равно нулю #4
C++
1
2
3
4
5
6
7
8
9
10
11
#include <ctime>
#include <cstdio>
 
int main() {
    int i;
  double start = clock();
  // Insert your code here
  for(i=1;i<60000000;i++);
  printf("%.4lf\n", (clock() - start) / CLOCKS_PER_SEC);
  return 0;
}
значение i в цикле "for(i=1;i<60000;i++);" слишком мало.
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
01.12.2012, 00:36  [ТС]     Время выполнения программы равно нулю #5
Цитата Сообщение от __Александр__ Посмотреть сообщение
значение i в цикле "for(i=1;i<60000;i++);" слишком мало.
Я понимаю. А это никак нельзя исправить (чтобы он смог вычислить это)? Может есть другая функция?
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
01.12.2012, 00:40     Время выполнения программы равно нулю #6
Цитата Сообщение от Tige Посмотреть сообщение
Да,цикл выполняется быстрее, например при 60000000 ответ уже не равен 0. Но мне нужно именно 60000.
даже на 286ом ответ будет чуть менее чем ноль)))
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
01.12.2012, 00:48  [ТС]     Время выполнения программы равно нулю #7
Может есть другая функция вычисления времени?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
01.12.2012, 00:55     Время выполнения программы равно нулю #8
нет. точнее, есть, но и она выдаст 0.
найдите примерное время делением
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
01.12.2012, 01:02     Время выполнения программы равно нулю #9
На Linux есть очень удобная функция gettimeofday, с помощью которой можно легко получить время выполнения в микросекундах.

В системах Windows с этим сложнее. Самое лучшее, что я смог найти, это QueryPerformanceCounter\QueryPerformanceFrequency. Пример использования привести не смогу, но про них можно почитать тут:

Micro Second resolution timestamps on windows
Game Timing and Multicore Processors
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
01.12.2012, 01:08  [ТС]     Время выполнения программы равно нулю #10
Цитата Сообщение от I.M. Посмотреть сообщение
найдите примерное время делением
А можете на примере показать?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
01.12.2012, 01:12     Время выполнения программы равно нулю #11
допустим, надо найти время для 100 итераций, но у нас постоянно 0
запускаем 10000 итераций и получаем не 0. допустим 234мс
делим на 100 и получаем 2.34мс
чтобы уменьшить погрешность, надо програть несколько тестов и найти среднее арифметическое
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
01.12.2012, 13:42  [ТС]     Время выполнения программы равно нулю #12
Цитата Сообщение от I.M. Посмотреть сообщение
допустим, надо найти время для 100 итераций, но у нас постоянно 0
запускаем 10000 итераций и получаем не 0. допустим 234мс
делим на 100 и получаем 2.34мс
чтобы уменьшить погрешность, надо програть несколько тестов и найти среднее арифметическое
А если у меня программа с пузырьковой сортировкой для 20 чисел?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    int mas[20], masv[20],i,n=20,t,z=0;
    clock_t start; clock_t end;
 
    srand(time(NULL));
    printf("Massiv: ");
    for (i=0;i<n;i++) {
        mas[i]=rand() %99;   //создаем массив из случайных чисел
        masv[i]=mas[i];
        printf("%d ",mas[i]);
    }
    //пузырьковая(возр)
    printf("\n\nPuzirkovaya sort:\n");
    start = clock();
    for (t=1;t<n;t++){
        for(i=n-1;i>0;i--){
            if (masv[i]<masv[i-1]){
                z=masv[i-1];
                masv[i-1]=masv[i];
                masv[i]=z;
            }
        }
    }
    end = clock();
    printf("start %lf ms\n", ((double) end-start)); //время(но оно равно 0)
    for (i=0;i<n;i++) {printf("%d ",masv[i]);} //вывод массива
    getchar();
    return 0;
}
Подскажите пожалуйста, как быть в этом случае?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2012, 14:21     Время выполнения программы равно нулю
Еще ссылки по теме:

Чему будет равно значение переменной z после выполнения следующего фрагмента программы? C++
C++ Определить, равно ли число (двумерного массива) нулю. Если равно, то вместо нуля записываем указанный символ
C++ Ошибка во время выполнения программы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
01.12.2012, 14:21     Время выполнения программы равно нулю #13
а тебе нужно время сортировки именно случайного массива?
Есть идея вложить сортировку пузырьком внутрь ещё одного большого цикла и 100 раз сортировать туда-сюда, меняя каждый раз направление (по возрастанию/по убыванию)
А потом делим на 100. (я надеюсь ясно изложил мысль)

Это не совсем честный тест, т.к. обратный порядок является самым худшим случаем для пузырька и может занижать среднюю производительность.

Другая идея. аналогично, но не направление менять а каждый раз генерировать массив заново. Но в этом случае время генерации массива сложится с временем сортировки.


Цитата Сообщение от Tige Посмотреть сообщение
А если у меня программа с пузырьковой сортировкой для 20 чисел?
вот 20 чисел: это ты откуда этот размер взял? Для адекватных оценок времени массив должен быть большим, тогда, возможно, и ухищрения не понадобятся


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
printf("\n\nPuzirkovaya sort:\n");
    start = clock();        
    for (int j=0; j<100; j++)//по j сортировка повторяется 100 раз туда сюда
    for (t=1;t<n;t++){
        for(i=n-1;i>0;i--){
            if ((j&1)?(masv[i]<masv[i-1]):(masv[i]>masv[i-1])){//если j нечётное, то
                             //  сортировать по возрастанию, иначе по убыванию
                z=masv[i-1];
                masv[i-1]=masv[i];
                masv[i]=z;
            }
        }
    }
    end = clock();
Yandex
Объявления
01.12.2012, 14:21     Время выполнения программы равно нулю
Ответ Создать тему
Опции темы

Текущее время: 13:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru