2015-12-17 13 views
5

Tôi đang cố gắng để thời gian một mã tôi đã có trong C + +. Tôi có một vòng lặp bên trong và bên ngoài mà tôi muốn thời gian riêng biệt, nhưng cùng một lúc. Đối với một số lý do khi tôi làm điều này một trong những trường hợp trả về 1.84467e + 13 và luôn luôn chính xác số này.Tại sao đồng hồ() quay lại 1.84467e + 13?

Tại sao điều này lại xảy ra?

Dưới đây là một ví dụ làm việc tối thiểu mà tái tạo hiệu ứng trên máy tính của tôi:

#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

Kết quả không phải là giống hệt nhau! – user1436187

+0

nếu bạn muốn có độ chính xác cao, không sử dụng 'clock()'. [C++ Cross-Platform High-Resolution Timer] (http://stackoverflow.com/q/1487695/995714), [C++ phép đo thời gian chính xác cao trong Windows] (http://stackoverflow.com/q/1825720/995714) , [Hẹn giờ có độ phân giải cao với C++ và Linux?] (Http://stackoverflow.com/q/538609/995714) –

Trả lời

12

bạn clock_t là rõ ràng một unsigned loại 64-bit.

Bạn đang dùng tick - tock, nơi tock được đo sautick, vì vậy nếu có bất kỳ sự khác biệt giữa hai ở tất cả, nó sẽ cố gắng để tạo ra một số tiêu cực - nhưng vì nó là một loại unsigned, đó là gói xung quanh để trở thành một cái gì đó gần với số lượng lớn nhất có thể được đại diện trong loại đó.

Rõ ràng, bạn thực sự muốn sử dụng tock-tick để thay thế.

+2

Chúa ơi, tôi là một thằng ngốc: / – Phill

-2

giả sử tic = 2ms và tac là 4ms; vì vậy khi bạn làm tic-tac (2-4) sẽ tạo ra một số âm rõ ràng .. ngay cả khi nó cho một số dương nó sẽ không là thời gian thực. và cũng có thể, số nó tạo ra (không xuất hiện trên máy tính của tôi) là một số lớn, vì vậy, hãy thử sử dụng trình điều khiển;

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

nó có thể làm việc ..

Các vấn đề liên quan