2015-12-17 4 views
5

Я пытаюсь найти код, который у меня есть на C++. У меня есть внутренний и внешний цикл, который я хочу разделить отдельно, но в то же время. По какой-то причине, когда я делаю это, один из экземпляров возвращает 1.84467e + 13 и всегда это точное число.Почему clock() возвращает 1.84467e + 13?

Почему это происходит?

Вот минимальный рабочий пример, который дублирует эффект на моей машине:

#include <iostream> 
#include <stdlib.h> 
#include <time.h> 

using namespace std; 

int main() 
{ 
    long int i, j; 
    clock_t start, finish, tick, tock; 
    double a = 0.0; 
    double adding_time, runtime; 

    start = clock(); 
    for(i=0; i<10; i++) 
    { 
     a=0.0; 
     tick =clock(); 
     for(j=0; j<10000000; j++) 
     { 
      a+=1; 
     } 
     tock= clock(); 
     adding_time = (double)(tick - tock)/CLOCKS_PER_SEC; 
     cout << "Computation time:" << adding_time << endl; 

    } 
    finish = clock(); 
    runtime = (double)(finish - start)/CLOCKS_PER_SEC; 
    cout << "Total computation time:" << runtime << endl; 
} 
+0

Выход не точно так же! – user1436187

+0

Если вы хотите высокой точности, не используйте 'clock()'. [C++ кросс-платформенный таймер с высоким разрешением] (http://stackoverflow.com/q/1487695/995714), [высокоточное измерение времени C++ в Windows] (http://stackoverflow.com/q/1825720/995714) , [Таймер высокого разрешения с C++ и Linux?] (Http://stackoverflow.com/q/538609/995714) –

ответ

12

Ваш clock_t по-видимому, беззнаковое 64-битный тип.

Вы принимаете tick - tock, где tock измеряли послеtick, так что если есть какая-то разница между этими двумя вообще, он будет пытаться произвести отрицательное число - но так как это беззнаковый типа, это упаковка вокруг, чтобы стать чем-то близким к наибольшему числу, которое может быть представлено в этом типе.

Очевидно, что вы действительно хотите использовать tock-tick.

+2

Бог, я идиот: / – Phill

-2

let say tic = 2ms и tac 4ms; поэтому, когда вы делаете tic-tac (2-4), который будет генерировать отрицательное число, очевидно, даже если он дал положительное число, он не будет в реальном времени. а также число, которое он генерирует (которое не отображается на моем компьютере) - большое количество, поэтому попробуйте использовать манипулятор;

#include"iomanip" 
    cout << fixed << showpoint; 
cout << setprecision(2); 

это могло бы работать ..

 Смежные вопросы

  • Нет связанных вопросов^_^