Điều đó tùy thuộc vào ý nghĩa của bạn về "mức độ chính xác".
Số dấu phẩy động có giá trị "thông thường" (bình thường), nhưng cũng có các số đặc biệt, số phụ bình thường.Nếu bạn muốn tìm hiểu giới hạn khác nhau, tiêu chuẩn C có hằng số được xác định trước:
#include <math.h>
#include <stdio.h>
#include <float.h>
int main(void)
{
printf("%30s: %g\n", "FLT_EPSILON", FLT_EPSILON);
printf("%30s: %g\n", "FLT_MIN", FLT_MIN);
printf("%30s: %g\n", "nextafterf(0.0, 1.0)", nextafterf(0.0, 1.0));
printf("%30s: %g\n", "nextafterf(1.0, 2.0)-1", (nextafterf(1.0, 2.0) - 1.0f));
puts("");
printf("%30s: %g\n", "DBL_EPSILON", DBL_EPSILON);
printf("%30s: %g\n", "DBL_MIN", DBL_MIN);
printf("%30s: %g\n", "nextafter(0.0, 1.0)", nextafter(0.0, 1.0));
printf("%30s: %g\n", "nextafter(1.0, 2.0)-1", (nextafter(1.0, 2.0) - 1.0));
puts("");
printf("%30s: %Lg\n", "LDBL_EPSILON", LDBL_EPSILON);
printf("%30s: %Lg\n", "LDBL_MIN", LDBL_MIN);
printf("%30s: %Lg\n", "nextafterl(0.0, 1.0)", nextafterl(0.0, 1.0));
printf("%30s: %Lg\n", "nextafterl(1.0, 2.0)-1", (nextafterl(1.0, 2.0) - 1.0));
return 0;
}
Chương trình in trên 4 giá trị đối với từng loại:
- sự khác biệt giữa 1 và giá trị ít nhất lớn hơn 1 trong loại đó (lOẠI
_EPSILON
),
- giá trị bình thường dương tính tối thiểu trong một loại nhất định (lOẠI
_MIN
). Số này không bao gồm subnormal numbers,
- giá trị dương tối thiểu trong một loại nhất định (
nextafter
* (0
... )
). Số này bao gồm các số phụ,
- số tối thiểu lớn hơn 1. Số này giống như TYPE
_EPSILON
, nhưng được tính theo cách khác.
Tùy thuộc vào ý bạn là "chính xác", bất kỳ hoặc không có điều nào ở trên có thể hữu ích cho bạn.
Đây là kết quả của chương trình trên vào máy tính của tôi:
FLT_EPSILON: 1.19209e-07
FLT_MIN: 1.17549e-38
nextafterf(0.0, 1.0): 1.4013e-45
nextafterf(1.0, 2.0)-1: 1.19209e-07
DBL_EPSILON: 2.22045e-16
DBL_MIN: 2.22507e-308
nextafter(0.0, 1.0): 4.94066e-324
nextafter(1.0, 2.0)-1: 2.22045e-16
LDBL_EPSILON: 1.0842e-19
LDBL_MIN: 3.3621e-4932
nextafterl(0.0, 1.0): 3.6452e-4951
nextafterl(1.0, 2.0)-1: 1.0842e-19
Không nổi có mantissa 23-bit? Tại sao bạn mong đợi 2^-64? – Rup