float.h trong C

Header file có tên float.h của Thư viện C chứa một tập hợp các hằng số đa dạng (phụ thuộc vào nền tảng) liên quan tới các giá trị số thực dấu chấm động. Các hằng này được đề xuất bởi ANSI C. Trước khi tìm hiểu các hằng này, bạn cần biết số thực dấu chấm động gồm 4 thành phần:

Thành phần Mô tả
S Dấu ( +/- )
b Biểu diễn cơ số (base): hệ nhị phân là 2, thập phân là 10, thập lục phân là 16, …
e Số mũ (exponent), một số nguyên giữa emin và emax
p Số ký tự thập phân có nghĩa (Precision)

Dựa vào 4 thành phần trên, một số thực dấu chấm động sẽ có giá trị của nó được biểu diễn như sau:

s thc du chm động = ( S ) p x be

hoc

s thc du chm động = (+/-) precision x baseexponent

Các macro được định nghĩa trong float.h

Các giá trị sau là trình triển khai riêng và được định nghĩa với chỉ thị #define, nhưng các giá trị này không thể là chữ thường. Ghi chú rằng, tất cả FLT tham chiếu tới kiểu float, DBL tham chiếu tới double và LDBL tham chiếu tới long double.

Macro Mô tả
FLT_ROUNDS Định nghĩa chế độ làm tròn cho phép cộng số thực dấu chấm động và nó có thể có bất kỳ giá trị nào sau đây:
-1 − Không xác định
0 − Làm tròn về 0
1 − Làm tròn về giá trị gần nhất
2 − Hướng về dương vô cực
3 − Hướng về âm vô cực
FLT_RADIX 2 Định nghĩa biểu diễn cơ số của số mũ. Base-2 là hệ nhị phân, base-10 là hệ thập phân…
FLT_MANT_DIG

DBL_MANT_DIG

LDBL_MANT_DIG

Các macro này định nghĩa số chữ số để biểu diễn số thực (trong FLT_RADIX base)
FLT_DIG 6

DBL_DIG 10

LDBL_DIG 10

Các macro này xác định số chữ số thập phân tối đa (base-10) có thể được biểu diễn mà không thay đổi sau khi làm tròn
FLT_MIN_EXP

DBL_MIN_EXP

LDBL_MIN_EXP

Các macro này xác định giá trị nguyên âm nhỏ nhất cho số mũ (exponent) trong cơ số FLT_RADIX
FLT_MIN_10_EXP -37

DBL_MIN_10_EXP -37

LDBL_MIN_10_EXP -37

Các macro này xác định giá trị nguyên âm nhỏ nhất cho một số mũ (exponent) trong cơ số 10
FLT_MAX_EXP

DBL_MAX_EXP

LDBL_MAX_EXP

Các macro này xác định giá trị nguyên lớn nhất cho một số mũ (exponent) trong cơ số FLT_RADIX
FLT_MAX_10_EXP +37

DBL_MAX_10_EXP +37

LDBL_MAX_10_EXP +37

Các macro này xác định giá trị nguyên lớn nhất cho một số mũ (exponent) trong cơ số 10
FLT_MAX 1E+37

DBL_MAX 1E+37

LDBL_MAX 1E+37

Các macro này xác định giá trị số thực dấu chấm động lớn nhất
FLT_EPSILON 1E-5

DBL_EPSILON 1E-9

LDBL_EPSILON 1E-9

Các macro này xác định chữ số có nghĩa tối thiểu mà có thể biểu diễn được
FLT_MIN 1E-37

DBL_MIN 1E-37

LDBL_MIN 1E-37

Các macro này định nghĩa các giá trị số thực dấu chấm động nhỏ nhất

Ví dụ

Chương trình C sau minh họa cách sử dụng của một số hằng được định nghĩa trong float.h.

#include <stdio.h>
#include <float.h>

int main()
{
   printf("Gia tri max cua mot so thuc = %.10e\n", FLT_MAX);
   printf("Gia tri min cua mot so thuc = %.10e\n", FLT_MIN);

   printf("So ky so de bieu dien mot so = %.10e\n", FLT_MANT_DIG);
}

Biên dịch và chạy chương trình C trên sẽ cho kết quả: