30/09/2018, 17:00
Thời gian tính toán
Thời gian tính toán của 2 đoạn code này có khác nhau không nhỉ
n=1;
n=22*33*44;
với
n=1;
n*=22;
n*=33;
n*=44;
thêm 2 đoạn này nữa
int i;
for (i=1;i<sqrt(n);i++)
{something;}
với
int i;
int sq=sqrt(n);
for (i=1; i<sq; i++)
{something;}
Bài liên quan
Với compiler hiện nay thì Đạt nghĩ là giống nhau. Compiler là chương trình đọc code của mình vào, và người viết compiler họ có thể hiểu được 2 đoạn code này là như nhau và sẽ đưa ra cách tối ưu để chạy hai đoạn code này với tốc độ ngang nhau.
Update: Câu trả lời dưới của @nguyenchiemminhvu đúng hơn cho đoạn thứ 2
Cách 2 vẫn ổn hơn.
Chính xác, với compiler xịn thì người ta sẽ tự tính cái này luôn. Nhưng cách 2 hay hơn. Bởi vì mình sẽ không cần phải tính lại
sqrt(n)
cho mỗi lần so sánh.tiếp nhé so sánh i++; với i=i+1;
hồi ấy học pascal, kiếm được mấy mẹo tối ưu chương trình cái nào không tối ưu là chạy i ạch ngay, chắc là tại compiler nó không xịn bằng.
Như cái ở trên thì có một topic về pascal cãi nhau như chày cối bên ddth. hình như là giữa inc(i); và i=i+1;
Mình có thể thử mà, viết một vòng
for
tầm 10 tới 100 triệu lần rồi so sánh tốc độ củai++
vài=i+1
.Ngày trước thì Đạt nghĩ
i++
chắc chắn sẽ nhanh hơn. Nhưng bây giờ thì Đạt lại cho rằng 50/50. @Rok_Hoang thử phátDùng cái hàm tính thời gian hôm trước @david15894 có share
E trc đọc đâu đó thấy i=i+1 họ bảo nhanh hơn i++ , e trc search google mấy cách tối ưu code nói vậy
inc(i) nhanh hơn i:=i+1 thì phải
Còn i++ chắc là nhanh hơn nữa