Nick Chung gửi vào
- 59084 lượt xem
Bài này bổ xung các tập lệnh về các phép tính : exp(ex), Idexp(x*2exponent), modf, ln(x), log10(x), floor(), ceil(), atoi()…
Các kiến thức liên quan
Hằng số toán học e là cơ số của logarit tự nhiên.
Giá trị số của e tới 20 chữ số thập phân là:
e=2,71828 18284 59045 23536...
Đồ thị hàm y = ax.
Hàm exp(x)
Cấu trúc
double exp(double x)
Kiểu tham trị x: double.
Kiểu trả về: double.
Trả về giá trị của biếu thức: ex
Đồ thị hàm y = ex.
Ví dụ
double x = 4; double y; void setup() { Serial.begin(9600); y = exp(x); Serial.println(y, 5); // lấy 5 số phần thập phân //y=54.59815 } void loop() {}
Hàm frexp(x, int *exp)
Cấu trúc
double frexp(double x, int *exponent)
Giá trị được trả về gồm 2 số:
- mantissa (phần định trị x )
- số nguyên được trỏ tới bởi exponent (số mũ a ).
Thuộc biểu thức y = x * (2a).
Ví dụ
double y = 20000; // y=x*(2 mũ a) int a; // số mũ double x; // phần định trị void setup() { Serial.begin(9600); x = frexp(y, &a); // chú ý thêm dấu "&" (phép gán địa chỉ) Serial.println(a); Serial.println(x, 8); // lấy 8 số phần thập phân để xem //a= 15 //x=0.61035156 // tóm lại : y=0.6103 * (2^15) ! } void loop() {}
Hàm ldexp(x, int exp)
Cấu trúc
double ldexp(double x, int exponent)
Trả về giá trị của biểu thức : x*2exponent
Kiểu tham trị exponent: int. (exponent dịch sang tiếng Việt là “số mũ” ).
Kiểu tham trị x: double.
Kiểu trả về: double.
Chú ý: kí tự “l” trong chữ “ldexp” là chữ e-lờ cao (viết thường).
Ví dụ
double y; // y=x*(2 mũ a) int a = 15; // số mũ double x = 0.61035156; // phần định trị void setup() { Serial.begin(9600); y = ldexp(x, a); Serial.println(y, 8); // lấy 8 số phần thập phân để xem //y=20000.00000000 } void loop() {}
Hàm log( x)
Cấu trúc
double log(double x)
- Trả về ln(x)
- Kiểu tham trị x: double.
- Kiểu trả về: double.
Ví dụ
double y; // y=ln(x) double x = 6.5; void setup() { Serial.begin(9600); y = log(x); Serial.println(y, 8); // lấy 8 số phần thập phân để xem //y=1.87180223 } void loop() { }
Hàm log10(x)
Cấu trúc
double log10(double x)
- Kiểu tham trị x: double.
- Kiểu trả về: double.
- Trả về log10(x)
Ví dụ
double y; // y=log10(x) double x = 4.0; void setup() { Serial.begin(9600); y = log10(x); Serial.println(y, 8); // lấy 8 số phần thập phân để xem //y=0.60206003 } void loop() { }
Hàm modf(x, *i)
Cấu trúc
double modf(double x, double *integer)
- Tách lấy phần nguyên và phần thập phân của một số thực.
- Kiểu tham trị x: double.
- Kiểu trả về: double.
Chú ý thêm kí tự “&” cho biến con trỏ.!
Ví dụ
double S = 62.123456; double Phan_nguyen, Phan_thap_phan; void setup() { Serial.begin(9600); Phan_thap_phan = modf(S, &Phan_nguyen); Serial.println(Phan_thap_phan, 6); // lấy 6 số phần thập phân để xem Serial.println(Phan_nguyen, 1); // lấy 1 số phần thập phân để xem } void loop() {}
Hàm ceil(x)
Cấu trúc
double ceil(double x)
- Trả về giá trị nguyên nhỏ nhất lớn hơn hoặc bằng x
- Kiểu tham trị x: double.
- Kiểu trả về: double.
Ví dụ
x
|
ceil(x)
|
1.2
|
2
|
1.5
|
2
|
1.9
|
2
|
2.0
|
2
|
2.1
|
3
|
Ví dụ
float a = 1.2; double b; void setup() { Serial.begin(9600); b = ceil(a); Serial.println(b, 1); // lấy 1 số phần thập phân để xem // b=2.0 } void loop() { ; }
Hàm floor(x)
Cấu trúc
double floor(double x)
- Kiểu tham trị x: double.
- Kiểu trả về: double.
- Trả về giá trị nguyên lớn nhất nhỏ hơn hoặc bằng x
Ví dụ
x
|
floor(x)
|
1.2
|
1
|
1.5
|
1
|
1.9
|
1
|
2.0
|
2
|
2.1
|
2
|
Ví dụ
float a = 2.0; double b; void setup() { Serial.begin(9600); b = floor(a); Serial.println(b, 1); // lấy 1 số phần thập phân để xem // b=2.0 } void loop() { }
Hàm atoi(a[])
Cấu trúc
int atoi(const char *A)
Hàm này dùng để chuyển đổi kí tự dạng chữ số (kiểu char) về chữ số. Nó trả về số nguyên đã được chuyển đổi dưới dạng một giá trị int. Nếu không có sự chuyển đổi hợp lệ nào được thực hiện, hàm trả về 0.
Khi đó số nhập vào có giá trị trong khoảng từ (-32768 -> 32767 ).
Ví dụ 1
const char Number[5] = "12345"; // mảng kí tự //hoặc : const char Number[]="12345"; int S; void setup() { Serial.begin(9600); S = atoi(Number); Serial.println(S); // Kết quả S là một số có giá trị S=12345. } void loop() { }
Ví dụ 2: Biểu diễn một số âm
Chú ý kích cỡ của mảng sẽ tăng thêm 1 đơn vị để lưu thêm dấu “-“ đằng trước số âm.
const char Number[] = "-12345"; // mảng kí tự //hoặc : const char Number[6]="-12345"; int S; void setup() { Serial.begin(9600); S = atoi(Number); Serial.println(S); // Kết quả S là một số có giá trị S=12345. } void loop() { }
Ví dụ 3: Nhập chữ số xem như giá trị
Các bạn chú ý cỡ của mảng phải bằng số lượng chữ cái của số muốn nhập.
Số từ (-99 đến 999) thì cỡ mảng là 3.
Số từ (-999 đến 9999 ) thì cỡ mảng là 4.
Số từ (-9999 đến đến 32767) thì cỡ mảng là 5.
Số từ (-32768 đến -10000) thì cỡ mảng là 6.
char Number[5]; // mảng kí tự int S; void setup() { Serial.begin(9600); // Kết quả S là một số có giá trị S=12345. Serial.println("Nhap so :"); } void loop() { while (1) { //lặp để quét if (Serial.available()) { Serial.readBytes(Number, 5); // đọc 5 byte Char với S = atoi(Number); Serial.println(S); } } }
Hàm itoa ()
Hàm này dùng để chuyển một số sang chuỗi kí tự !
char * itoa ( int value, char * str, int base );
Trong đó:
- value : là số cần truyền , (nếu value là một số âm thì kí tự "-" sẽ được đặt ở đầu chuỗi !)
- str : mảng chuỗi để lưu số dưới dạng kí tự
- base : để lựa chọn dạng cơ số muốn chuyển về
- base =2 : chuỗi kí tự có dạng số nhị phân
- base=8 : chuỗi kí tự có dạng bát phân
- base =10 : chuỗi kí tự có dạng thập phân
- base=16 : chuỗi kí tự có dạng HEX (thập lục phân)
Ví dụ minh họa :
void setup() { Serial.begin(9600); } int a = 1234; char chu_so[20]; void loop() { itoa(a, chu_so, 10); // chuyển thành số thập phân Serial.println(chu_so); itoa(a, chu_so, 16); // chuyển thành số hex Serial.println(chu_so); itoa(a, chu_so, 8); // chuyển thành số bát phân Serial.println(chu_so); itoa(a, chu_so, 2); // chuyển thành số nhị phân Serial.println(chu_so); delay(1000); Serial.println("___________"); }