Điều gì có nghĩa là hai cặp đôi "tương đương nhau"? Nó có nghĩa là đôi bên trong một số khoan dung của nhau. Kích thước của sự khoan dung đó, và liệu sự khoan dung đó có được biểu thị như một con số tuyệt đối hay là một tỷ lệ phần trăm của hai đôi, phụ thuộc vào ứng dụng của bạn. Ví dụ: hai ảnh được hiển thị trên trình xem ảnh có cùng chiều rộng bằng inch nếu chúng chiếm cùng số pixel trên màn hình, do đó dung sai của bạn sẽ là số tuyệt đối được tính dựa trên kích thước pixel cho màn hình của bạn . Mặt khác, lợi nhuận của hai công ty tài chính có thể "xấp xỉ bằng nhau" nếu chúng nằm trong phạm vi 0,1% của nhau. Đây chỉ là những ví dụ giả định, nhưng vấn đề là nó phụ thuộc vào ứng dụng của bạn.
Bây giờ, để thực hiện một số. Giả sử ứng dụng của bạn yêu cầu tuyệt đối. Sau đó, bạn có thể sử dụng
private static final double TOLERANCE = 0.00001;
public static boolean approxEqual(final double d1, final double d2) {
return Math.abs(d1 - d2) < TOLERANCE;
}
để so sánh hai đôi, và sử dụng
approxEqual(d1, d2) && approxEqual(d1, d3) && approxEqual(d1, d4) && approxEqual(d1, d5)
để so sánh lăm đôi.
Nguồn
2012-02-01 03:59:00
Bạn có thể nói thêm về bối cảnh? Bạn đang làm điều này từ một bài kiểm tra đơn vị? Trong trường hợp đó, một trong các assertEquals trong JUnit chỉ có một phương pháp để khẳng định rằng hai đôi là gần. –
Cảm ơn mọi người đã trả lời. Vì vậy, có, tôi đang cố gắng để làm một bài kiểm tra đơn vị, và phương pháp của tôi trả về thời gian mà một số số nguyên được thêm vào một mảng. Tôi muốn thử nghiệm phương pháp này với số lượng khác nhau của các số nguyên và so sánh thời gian. Tôi đoán phương thức ulp() có thể hoạt động. – FranXh