Tôi chỉ đang xem xét một số khái niệm cơ bản về Python và có một vấn đề phức tạp khi so sánh các số dấu phẩy động.So sánh số dấu phẩy động của Python
2.2 * 3.0 == 6.6
3.3 * 2.0 == 6.6
Tôi nghĩ cả hai đều nên trả về Sai. Tuy nhiên, điều thứ hai đã cho tôi một sự thật.
Vui lòng giúp tôi tại đây. Cảm ơn!
Bạn sẽ không bao giờ so sánh hai số phao bằng '=='. Sử dụng 'abs (a-b)
Steve
@Steve Có, tôi biết điều đó, nhưng vẫn cảm ơn cho ghi chú của bạn :) – Zhiya
@Steve: So sánh chính xác phức tạp hơn điều này, vì độ chính xác của phao là một số chữ số, không phải là giá trị số tuyệt đối. Một cái gì đó như 'abs (a-b) <= rel_prec * max (abs (a), abs (b))' là tốt hơn (với rel_prec gần 1e-16, ví dụ, đối với các float chính xác kép của Python). Thêm vào đó, trường hợp của một giá trị bằng không nên được xử lý quá. Tôi đã không kiểm tra đầy đủ điều này, nhưng sau đây có thể làm việc: 'abs (a-b) <= rel_prec * (tối đa (abs (a), abs (b)) nếu a! = 0! = B else 1)'. – EOL