Không có sẵn in2ilt macro cho nó, nhưng bạn có thể tạo của riêng bạn.
Sau đây là việc triển khai phiên bản "lỗi tuyệt đối" được mô tả trong this article.
macro_rules! assert_delta {
($x:expr, $y:expr, $d:expr) => {
if !($x - $y < $d || $y - $x < $d) { panic!(); }
},
}
Cụ thể, vĩ mô assert_delta
hoảng loạn nếu cả hai sự khác biệt giữa x
và y
và y
và x
là lớn hơn hoặc bằng d
(các "đồng bằng" hay giá trị "epsilon", ví dụ: khả năng chịu đựng).
Đây là một cách xấu để làm điều đó bởi vì một epsilon cố định, lựa chọn vì nó "có vẻ nhỏ", trên thực tế có thể là cách quá lớn khi các con số được so sánh là rất nhỏ là tốt. So sánh sẽ trả về "true" cho các số khác nhau. Và khi các con số rất lớn, epsilon có thể kết thúc nhỏ hơn lỗi làm tròn nhỏ nhất, để so sánh luôn trả về "sai".
Do việc thực hiện trước đó bị hỏng trong các trường hợp khác nhau, nói chung, bạn nên không sử dụng số. Bạn có thể muốn triển khai macro mạnh mẽ hơn, ví dụ: một trong đó kiểm tra cho một "lỗi tương đối".
Hãy coi chừng [sử dụng epsilons (lề lỗi tuyệt đối) để so sánh điểm trôi nổi] (http://floating-point-gui.de/errors/comparison/). – Shepmaster