2010-06-22 32 views
5

Tôi có một lớp vectơ 3D. Các biến riêng tư được xác định:So sánh bộ nhớ, nhanh hơn?

 
union { 
    struct { 
     double x; 
     double y; 
     double z; 
    }; 
    double data[3]; 
}; 

Khi thực hiện toán tử ==, nhanh hơn?

 
return this->x == v.x && this->y == v.y && this->z == v.z; 

HOẶC

 
return memcmp(this->data, v.data) == 0; 
+0

Tôi đã sử dụng liên kết để tôi có thể chuyển 'dữ liệu' sang API của bên thứ ba yêu cầu' double * '. – Anthony

+0

@Stephen - trực tiếp memcmp-ing một cấu trúc có thể là nguy hiểm. Nếu trình biên dịch đặt vào đệm, các cấu trúc có thể khác nhau mặc dù tất cả các trường đều giống nhau. –

+0

@R Samuel: Cảm ơn, điểm tốt. _commentdrawn._ :) – Stephen

Trả lời

15

Thật không may là hai không phải là tương đương. (Cụ thể là NaN và số 0 đã ký không sử dụng so sánh bit trong FPU).

Vì vậy, bạn nên lựa chọn dựa trên tính chính xác, không phải tốc độ.

+1

Phải, tôi hoàn toàn quên mất điều đó. Rookie sai lầm tôi giả sử. – Anthony

+1

@Duracell: Lỗi lầm của tân binh là đáng lo ngại về hiệu suất trên mã tốt. :) Hiệu suất là mối quan tâm cuối cùng của bạn. – GManNickG

+1

@GMan: Bạn có thể nói điều đó, nhưng tôi hoàn toàn bỏ qua thực tế là memcmp sẽ không hoạt động. Nếu không có điều đó, tôi cho rằng mã của tôi là tốt và do đó có thể nhìn vào tốc độ. – Anthony

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