Giả sử tôi có hai đối tượng i
và f
của các loại tương ứng I
và F
. Tôi biết rằng std::is_integral<I>::value
là đúng và std::is_floating_point<F>::value
là đúng sự thật.Cách tuân thủ tiêu chuẩn để so sánh float với tích phân?
Có cách nào hoàn toàn tuân thủ tiêu chuẩn cách để tìm hiểu xem giá trị của i
có nhỏ hơn giá trị f
không? Lưu ý nhấn mạnh vào 'tuân thủ đầy đủ các tiêu chuẩn', đối với câu hỏi này, tôi chỉ quan tâm đến các câu trả lời được sao lưu bởi các đảm bảo từ tiêu chuẩn C++.
Việc thực hiện tầm thường i < I(f)
không làm việc, bởi vì giá trị của f
có thể không phù hợp với bên i
. Việc thực hiện tầm thường F(i) < f
không hoạt động, vì độ chính xác của f
có thể không đủ để đại diện cho i
, gây ra i
để làm tròn thành giá trị bằng f
(nếu bạn có IEEE754 nổi, 16777219 < 16777220.f
không thành công).
Nhưng ở đây có tình trạng tiến thoái lưỡng nan thực sự: nếu bạn muốn sử dụng std::numeric_limits::max
để giảm bớt những vấn đề này, bạn quay trở lại vấn đề ban đầu khi so sánh số nguyên và số nguyên! Điều này là do loại std::numeric_limits::max
bằng loại ban đầu.
Yêu cầu "cho câu hỏi này tôi chỉ quan tâm đến câu trả lời được sao lưu bằng cách đảm bảo từ C++ chuẩn" là không hợp lý và ngớ ngẩn cho câu hỏi này. Nó giống như yêu cầu một cách để thực hiện sắp xếp bong bóng và yêu cầu câu trả lời được sao lưu bằng tiêu chuẩn C++. Tiêu chuẩn C++ không có gì để nói về sắp xếp bong bóng. –
'i
Barry
@ Cheersandhth.-Alf Tôi không đồng ý. Toàn bộ điểm của câu hỏi là tìm một phương thức được định nghĩa rõ ràng trên bất kỳ triển khai C++ nào. Bạn có thể làm điều này cho loại bong bóng, nhưng tôi không chắc chắn bạn có thể cho so sánh này, do đó câu hỏi của tôi. – orlp