2010-11-13 41 views
14

Tại thời điểm 0:43:15 trong này Tech-Talk about D, Việc thực hiện hàm min được thảo luận. Mối quan tâm về "ổn định" và "xáo trộn thêm (nếu các giá trị bằng nhau)" khi được sử dụng trong một số thuật toán được đề xuất là một trong những lý do cho việc thực hiện được hiển thị.Thực hiện chính xác min

Bất cứ ai có thể cung cấp một trường hợp sử dụng thực tế (hoặc cung cấp giải thích chi tiết hơn) trong đó việc triển khai cụ thể này là "ổn định" (hay còn gọi là tốt hơn). Hay đây chỉ là một ví dụ khác về các chuyên gia alpha-đi quá xa?

khuyến nghị thực hiện:

template <class LHS, class RHS, class Return> 
inline Return min(LHS& lhs, RHS& rhs) 
{ 
    return (rhs < lhs) ? rhs : lhs; 
} 

khác có thể thực hiện:

template <class LHS, class RHS, class Return> 
inline Return min(LHS& lhs, RHS& rhs) 
{ 
    return (lhs < rhs) ? lhs: rhs; 
} 

Proposal N2199 cung cấp triển khai dựa trên sau này, xin lưu ý rằng đề xuất này đã không thành công vào lúc này.

kiến ​​nghị liên quan khác liên quan đến min/max là N1840, N2485N2551

+6

Tôi không hiểu. Tôi không thể thấy bất kỳ lợi thế nào cho một trong những triển khai mà bạn hiển thị. Tại một số thời điểm, một trong số chúng phải được chọn ... –

+1

Tôi thấy rất thú vị về cách tập trung rất hẹp và khả năng ứng dụng hạn chế được đánh giá rất cao khi một câu hỏi tập trung rất rộng và áp dụng cho hầu hết mọi người được gọi là 'off- đề tài'. Tôi biết rằng trong các chi tiết lập trình có thể cực kỳ quan trọng. Nhưng điều này rất quan trọng và tôi sẽ không bao giờ phụ thuộc vào sự ổn định của min để được chính xác trong mã tôi viết anyway bởi vì nó quá nhỏ một chi tiết để phụ thuộc vào bất cứ ai nhận được quyền. – Omnifarious

+5

@Omnifarious: Tôi nghĩ rằng bạn đã hiểu sai vấn đề, nó không phải về điều gì đó tầm thường, mà là một vấn đề đã ám ảnh C++ trong 10 năm qua, nhưng hơn nữa, một trong những chuyên gia thế giới về ngôn ngữ và một số người một tổ chức có uy tín như Google, đã đưa ra nhận xét và làm cho âm thanh trở nên bình thường và "vấn đề thực tế" khi hầu hết trong ngành đều đồng ý với điều ngược lại, người ta không thể không tự hỏi liệu đây có phải là Kepler hay không Galileo tình hình gọi vòng quanh thế giới ... rất có thể tất cả chỉ là vô nghĩa, nhưng tại sao không thảo luận về nó? –

Trả lời

35

Trong trường hợp này, tôi khá chắc chắn "ổn định" là đề cập đến ổn định khi nó được áp dụng trong phân loại - ví dụ, rằng khi/nếu hai phần tử bằng nhau, chúng sẽ được sắp xếp theo thứ tự giống như chúng bắt đầu. Để thực hiện điều đó, bạn muốn trả lại lhs khi số này nhỏ hơn hoặc bằng rhs - nhưng trong C++ bạn (thông thường) muốn thực hiện điều đó chỉ bằng cách sử dụng operator<, mà không phụ thuộc vào việc có operator<=.

-3

Trong trường hợp chung, không có lợi thế nào cho việc triển khai thực hiện trên một triển khai khác. Nếu bạn đang triển khai min cho một mức sử dụng cụ thể, bạn có thể chọn một trong các biểu mẫu dựa trên dữ liệu mà nó sẽ được áp dụng để tận dụng tối đa các dự đoán chi nhánh.

Nếu đối với hầu hết các trường hợp sử dụng, mức tối thiểu dự kiến ​​là rhs, hãy chọn triển khai đầu tiên. Nếu đó là lhs, hãy chọn triển khai thứ hai.

+0

Dự đoán chi nhánh có thể tiên đoán giả tạo giống như các gợi ý. – Puppy

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