30/09/2018, 16:02
Câu hỏi về thời gian thực hiện của mã (Execution time)
Mình mới biết đến 1 công cụ tính thời gian thực thi 1 đoạn code có vẻ rất thú vị nhưng lại chưa hiểu rõ lắm về nó nên mình muốn tham khảo ý kiến các bạn về topic này. Bạn nào rành về mảng này có thể giải thích cho mình hiểu hơn về nó với! Tại sao đoạn code này chạy cỡ nào time cũng ra 0s trong khi các đoạn clip của anh Đạt lại ra phần bao nhiêu đó của giây 1 cách chính xác. Mình xin cám ơn!
clock_t begin, end;
double time_spent;
begin = clock();
/* here, do your time-consuming job */
end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
Bài liên quan
Nếu bạn chạy đoạn này nó ra 0 là đúng rồi vì nó có tính thời gian chạy cái gì đâu bạn
Bạn thử cho 1 vòng for tính tổng từ 1 đến 10 vào giữa xem nào
À không, đoạn giữa begin = clock(); với end = clock(); mình ntn cơ:
Chưa hiểu dùng sai chỗ nào vẫn 0s thôi!
Để mình thử xem kết quả thế nào.
Chẳng sai gì cả @@. Mình chạy cũng bằng 0 :))). WHy???
Đưa nguyên source bạn dò lại dùm mình thử biết đâu sai đâu đó ở trên mà mình không nhận ra wink:
Còn thư viện thì stdio.h conio.h và time.h nha!
Bạn dùng markdown sai rồi nhé. Xem tại đây
Không báo lỗi nhưng kq vẫn vậy :’(
Ẹc, thế chắc cú pháp câu lệnh của bạn làm sao. Xem lại lần nữa =)).
đây, chỉ sửa chỗ này thôi!
Chỗ này là sai bạn ạ. Mình thay code C bằng code C++ khác mỗi chỗ in ra màn hình thôi. Thì nó in ra được đáp án. @@
Mình mới biết sơ về C chưa rành C++ nhưng mà chạy code của bạn mình không hiểu sao nó tắt màn hình nhanh quá, có cách nào dừng màn hình không? Mình đã thử system(“pause”); vẫn không được
Hix. Cuối cùng cũng tìm ra vì sao.
Mình thử chạy trên C++ thay mỗi chỗ in ra màn hình và được đáp án. Như vậy bạn sai chỗ này này
Bạn sửa %ld thành %lf nhé
À mình thử bỏ return và thay int main = void main thì lại dừng được nhưng vẫn 0s
nó vẫn cứ ra 0.0000s
Để cho nó chắc hơn bạn sửa lại hẳn thành thế này đi
Tại chương trình của bạn ngắn quá. Nó sẽ ra đáp số 0.001s. Thỉnh thoảng nó sẽ ra 0.000. ~.~. Mình cũng bị vậy.
À mình hiểu rồi! Thì ra phải cho nó vô vòng lặp thì đồng hồ mới bấm giờ được chứ để không không nó không đo đc là phải. Bạn cho vòng lặp 10000 lần nó ra time thiệt, nhưng chạy nhiều lần quá trong khi mình chỉ cần đo time 1 lần đoạn code đó. Thế là mình thay for(int i=0; i<1; i++) bỏ code vô giữa thế là ra time luôn. Cám ơn bạn rất nhiều nha!
Không, không phải vậy đâu @@. Bạn để nguyên nó cũng ra time. bạn phải compile lại chương trình sau mỗi lần chứ k phải chạy luôn.
Bây giờ bạn bỏ vòng for đi. sửa code y như ban đầu. Nó sẽ ra. Mình tin là như thế =)))
Mình thử rồi, nó lại ra 0.0000 . Mà trong clip thấy anh Đạt ra 0.0047 lận. Nhưng mình viết bằng Visual Studio 2013 còn anh Đạt viết bằng CodeBlock. Có khi nào compile mình nhanh hơn không ta ?
Mình nghĩ cũng có thể do bạn chạy chương trình đã đc compile rồi nên nó vẫn ra là 0.000. Ca này khó ghê =))). MÌnh dùng devC. Compile lần đầu tiên ra 0.001s. Nhấn tiếp 3 phá nữa mới lại ra 0.001 =)). Thử 10 lần thấy Trung bình 3 lần ra 1 lần :))))))))))