AlmostEqual - so sánh không nhạy với lỗi làm tròn
CÚ PHÁP
AlmostEqual( x, y, ulps = 5 )
TRẢ VỀ
SỐ
MẢNG
CHỨC NĂNG
Đây là một hàm trợ giúp để so sánh các số dấu phẩy động. Hàm này trả về True nếu x và y bằng nhau hoặc gần bằng nhau với độ chính xác được xác định (ulps). Đề nghị sử dụng hàm này thay vì kiểm tra bằng (==) để có sự so sánh đáng tin cậy hơn và tránh các vấn đề về độ chính xác của dấu phẩy động theo tiêu chuẩn IEEE.
Tham số:
x, y - các số hoặc mảng được so sánh,
ulps đại diện cho "đơn vị ở vị trí cuối cùng" và đại diện cho sai số tương đối tối đa của quá trình so sánh. Vì số dấu phẩy động IEEE 32 bit có độ chính xác là 7 chữ số có nghĩa, 1 đơn vị ở vị trí cuối cùng (ulp) đại diện cho sai số tương đối là 0,00001%. Giá trị mặc định của tham số ulps là 5, tương ứng với "độ nhạy so sánh" khoảng 0,00005%.
Cảm ơn Bruce Dawson đã đóng góp phần thuật toán nhanh.
VÍ DỤ
if( 1/3 == 0.3333333 )
{
printf("Equality exact trong số dấu phẩy động IEEE 32 bit\n");
}
if( AlmostEqual( 1/3, 0.3333333 ) )
{
printf("Các số gần nhau\n");
}