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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
#1

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

01.12.2012, 00:15. Просмотров 1267. Ответов 12
Метки нет (Все метки)

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? И как это исправить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2012, 00:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Время выполнения программы равно нулю (C++):

Определить, равно ли число (двумерного массива) нулю. Если равно, то вместо нуля записываем указанный символ - C++
Вот что нужно написать кодом: сравнить, равно ли число (двумерного массива) нулю. Если равно, то вместо нуля записываем, например,...

Чему будет равно a после выполнения следующего фрагмента программы в строке // 1 ? - C++
Чему будет равно a после выполнения следующего фрагмента программы в строке // 1 ? int a = 0; for (;;) { if (a) break; a--; ...

Чему будет равно значение переменной s после выполнения следующего фрагмента программы - C++
Очень прошу помогите решить!!!! 1) Чему будет равно значение переменной s после выполнения следующего фрагмента программы при...

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

Время выполнения программы - C++
Здравствуйте.Я до сих пор новичок в программировании,сразу скажу,и тонкостей не знаю. Собрал я тут программу с использованием CUDA.И...

Определить время выполнения программы - C++
В связи с доработкой алгоритма разных прог, иногда необходимо посмотреть на сколько повысилась производительность и уменьшилось время...

12
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
01.12.2012, 00:23 #2
Есть два варианта: либо компилятор просто выкинул пустой цикл при оптимизации, либо цикл выполняется быстрее, чем происходит тик системного таймера.
1
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
01.12.2012, 00:25  [ТС] #3
Да,цикл выполняется быстрее, например при 60000000 ответ уже не равен 0. Но мне нужно именно 60000.
0
__Александр__
7 / 10 / 0
Регистрация: 17.09.2012
Сообщений: 188
Записей в блоге: 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++);" слишком мало.
1
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
01.12.2012, 00:36  [ТС] #5
Цитата Сообщение от __Александр__ Посмотреть сообщение
значение i в цикле "for(i=1;i<60000;i++);" слишком мало.
Я понимаю. А это никак нельзя исправить (чтобы он смог вычислить это)? Может есть другая функция?
0
booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
01.12.2012, 00:40 #6
Цитата Сообщение от Tige Посмотреть сообщение
Да,цикл выполняется быстрее, например при 60000000 ответ уже не равен 0. Но мне нужно именно 60000.
даже на 286ом ответ будет чуть менее чем ноль)))
0
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
01.12.2012, 00:48  [ТС] #7
Может есть другая функция вычисления времени?
0
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
01.12.2012, 00:55 #8
нет. точнее, есть, но и она выдаст 0.
найдите примерное время делением
1
prazuber
110 / 110 / 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
1
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
01.12.2012, 01:08  [ТС] #10
Цитата Сообщение от I.M. Посмотреть сообщение
найдите примерное время делением
А можете на примере показать?
0
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
01.12.2012, 01:12 #11
допустим, надо найти время для 100 итераций, но у нас постоянно 0
запускаем 10000 итераций и получаем не 0. допустим 234мс
делим на 100 и получаем 2.34мс
чтобы уменьшить погрешность, надо програть несколько тестов и найти среднее арифметическое
1
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;
}
Подскажите пожалуйста, как быть в этом случае?
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,935
Записей в блоге: 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();
1
01.12.2012, 14:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2012, 14:21
Привет! Вот еще темы с ответами:

Посчитать время выполнения программы - C++
В среде visual studio 2012 можно? или в коде написать что нужно, подскажите

Уменьшить время выполнения программы - C++
#include &lt;iostream&gt; using namespace std; int main() { int n; cin &gt;&gt; n; char mas; int k;

Ошибка во время выполнения программы - C++
Здравствуйте, есть задача Дано два списка чисел, числа в первом списке упорядочены по неубыванию. Для каждого числа из второго списка...

Определить время выполнения программы - C++
Как узнать сколько выполняется программа на С++.Т.е. что бы со всеми результатами,скажем в конце, выводилось еще и ее время выполнения,...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru