Floating Point Constants
Floating Point Constants trong Arduino là các giá trị số thực (có dấu chấm thập phân) được sử dụng trong chương trình để biểu thị số liệu với phần nguyên và phần thập phân. Arduino hỗ trợ các kiểu dữ liệu số thực như float và double (cả hai đều có kích thước 4 byte và độ chính xác tương tự nhau trên hầu hết các vi điều khiển AVR).
1. Đặc điểm của Floating Point Constants trong Arduino:
-
Biểu diễn số thực:
- Một số thực được viết với phần nguyên và phần thập phân, được phân cách bằng dấu chấm (
.
). - Ví dụ:
3.14
,-0.001
,123.456
.
- Một số thực được viết với phần nguyên và phần thập phân, được phân cách bằng dấu chấm (
-
Ký hiệu khoa học (scientific notation):
- Floating point constants cũng có thể được biểu diễn bằng ký hiệu khoa học (exponential notation) với chữ
E
hoặce
để biểu thị mũ của 10. - Ví dụ:
2.5E3
tương đương với (2.5 \times 10^3 = 2500), và1.2e-4
tương đương (1.2 \times 10^{-4} = 0.00012).
- Floating point constants cũng có thể được biểu diễn bằng ký hiệu khoa học (exponential notation) với chữ
-
Kiểu dữ liệu ngầm định:
- Các số thực được mặc định coi là kiểu double trên hầu hết các nền tảng, nhưng trên Arduino (các vi điều khiển AVR như ATmega328P), double và float có cùng độ chính xác (4 byte).
- Bạn có thể gắn hậu tố
f
để chỉ định một hằng số là kiểu float rõ ràng:float x = 3.14f; // Kiểu float
-
Hạn chế độ chính xác:
- Với 4 byte, các số thực kiểu float hoặc double trên Arduino có độ chính xác khoảng 6-7 chữ số thập phân. Điều này nghĩa là bạn không thể biểu diễn các số quá lớn hoặc quá nhỏ với độ chính xác cao.
2. Sử dụng Floating Point Constants trong Arduino
Floating point constants thường được dùng trong các tính toán số học yêu cầu độ chính xác cao hơn so với số nguyên, như trong các phép tính toán học phức tạp, đồ thị, hoặc cảm biến:
Ví dụ minh họa:
void setup() {
Serial.begin(9600);
float pi = 3.14159; // Hằng số kiểu float
double scientific = 1.23e4; // Hằng số dạng khoa học
float radius = 5.0;
float area = pi * radius * radius; // Tính diện tích hình tròn
Serial.println("Area of the circle:");
Serial.println(area);
}
void loop() {
// Không làm gì trong loop
}
Lưu ý:
- Hiệu suất xử lý: Các phép tính với floating point thường chậm hơn so với số nguyên do yêu cầu tính toán phức tạp hơn.
- Hạn chế bộ nhớ: Floating point sử dụng nhiều bộ nhớ hơn so với số nguyên, vì vậy cần cân nhắc nếu bạn làm việc trên các vi điều khiển với tài nguyên hạn chế.
- Cần cẩn thận với sai số: Do cách biểu diễn floating point trong máy tính, các phép tính có thể gây ra sai số nhỏ.