math.h trong C

Header file có tên math.h trong Thư viện C định nghĩa các hàm toán học đa dạng và một macro. Tất cả các hàm có sẵn trong thư viện này nhận double như là một tham số và trả về kết quả ở kiểu double.

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

Chỉ có một Macro được định nghĩa trong thư viện này:

HUGE_VAL: Macro này được sử dụng khi kết quả của một hàm không thể biểu diễn dưới dạng một số thực dấu chấm động. Nếu độ lớn để biểu diễn chính xác kết quả là quá lớn, thì hàm thiết lập errno thành ERANGE để chỉ một Range Error, và trả về một giá trị đủ lớn, cụ thể được đặt tên bởi HUGE_VAL hoặc đối của nó là – HUGE_VAL.

Nếu độ lớn của kết quả là quá nhỏ, thì một giá trị 0 được trả về. Trong trường hợp này, errno có thể hoặc không thể được thiết lập thành ERANGE.

Các hàm được định nghĩa trong math.h

Sau đây là một số hàm được định nghĩa trong math.h trong Thư viện C:

Hàm Mô tả
double acos(double x) Trả về arcos của x (giá trị radian)
double asin(double x) Trả về arcsin của x (giá trị radian)
double atan(double x) Trả về arctan của x (giá trị radian)
double atan2(doubly y, double x) Trả về arctan của y/x (giá trị radian)
double cos(double x) Trả về cos của góc x (giá trị radian)
double cosh(double x) Trả về cosh (hàm hyperbolic cosin) của x (giá trị radian)
double sin(double x) Trả về sin của góc x (giá trị radian)
double sinh(double x) Trả về sinh (hàm hyperbolic sin) của x (giá trị radian)
double tanh(double x) Trả về tanh (hàm hyperbolic tan) của x (giá trị radian)
double exp(double x) Trả về ex
double frexp(double x, int *exponent) Giá trị được trả về là mantissa (phần định trị) và số nguyên được trỏ tới bởi exponent (số mũ). Giá trị kết quả là x = mantissa * 2 ^ exponent
double ldexp(double x, int exponent) Trả về x*2exponent
double log(double x) Trả về lnx
double log10(double x) Trả về log10(x)
double modf(double x, double *integer) Trả về phần thập phân của x
double pow(double x, double y) Trả về xy
double sqrt(double x) Trả về căn bậc hai của x
double ceil(double x) Trả về giá trị nguyên nhỏ nhất lớn hơn hoặc bằng x
double fabs(double x) Trả về trị tuyệt đối của x
double floor(double x) Trả về giá trị nguyên lớn nhất nhỏ hơn hoặc bằng x
double fmod(double x, double y) Trả về phần dư của phép chia x/y

1. Hàm acos() trong C

Hàm double acos(double x) trong Thư viện C trả về arcos của x (giá trị radian).

Khai báo hàm acos() trong C

Dưới đây là phần khai báo cho hàm acos() trong C:

double acos(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động trong đoạn [-1,+1].

Trả về giá trị:

Hàm này trả về arcos của x, trong đoạn [0, pi] radian.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm acos() trong C:

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

int main ()
{
   double x, ret, val;

   x = 0.9;
   val = 180.0 / PI;

   ret = acos(x) * val;
   printf("Gia tri arccos cua %lf la bang %lf", x, ret);
   
   return(0);
}

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

2. Hàm asin() trong C

Hàm double asin(double x) trong Thư viện C trả về arcsin của x (giá trị radian).

Khai báo hàm asin() trong C

Dưới đây là phần khai báo cho hàm asin() trong C:

double asin(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động trong đoạn [-1,+1].

Trả về giá trị:

Hàm này trả về arcsin của x, trong đoạn [-pi/2,+pi/2] radian.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm asin() trong C:

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

int main ()
{
   double x, ret, val;
   x = 0.9;
   val = 180.0 / PI;

   ret = asin(x) * val;
   printf("Gia tri arcsin cua %lf la bang %lf", x, ret);
   
   return(0);
}

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

3. Hàm atan() trong C

Hàm double atan(double x) trong Thư viện C trả về arctan của x (giá trị radian).

Khai báo hàm atan() trong C

Dưới đây là phần khai báo cho hàm atan() trong C:

double atan(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động.

Trả về giá trị:

Hàm này trả về arctan của x, trong đoạn [-pi/2,+pi/2] radian.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm atan() trong C:

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

int main ()
{
   double x, ret, val;
   x = 1.0;
   val = 180.0 / PI;

   ret = atan (x) * val;
   printf("Gia tri arctan cua %lf la bang %lf", x, ret);
   
   return(0);
}

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

4. Hàm atan2() trong C

Hàm double atan2(doubly y, double x) trong Thư viện C trả về arctan của y/x (giá trị radian).

Khai báo hàm atan2() trong C

Dưới đây là phần khai báo cho hàm atan2() trong C:

double atan2(doubly y, double x)

Tham số:

  • x − Đây là giá trị số thực dấu chấm động biểu diễn tọa độ x.
  • y − Đây là giá trị số thực dấu chấm động biểu diễn tọa độ y.

Trả về giá trị:

Hàm này trả về arctan của y/x, trong đoạn [-pi,+pi] radian.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm atan2() trong C:

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

int main ()
{
   double x, y, ret, val;

   x = -7.0;
   y = 7.0;
   val = 180.0 / PI;

   ret = atan2 (y,x) * val
   printf("Gia tri arctan2 cua x = %lf, y = %lf ", x, y);
   printf("la bang %lf\n", ret);
  
   return(0);
}

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

5. Hàm cos() trong C

Hàm double cos(double x) trong Thư viện C trả về cos của góc x (đo bằng radian).

Khai báo hàm cos() trong C

Dưới đây là phần khai báo cho hàm cos() trong C:

double cos(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động biểu diễn một góc được diễn đạt bằng giá trị radian.

Trả về giá trị:

Hàm này trả về cos của x.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm cos() trong C:

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

int main ()
{
   double x, ret, val;

   x = 60.0;
   val = PI / 180.0;
   ret = cos( x*val );
   printf("Gia tri cosin cua %lf la bang %lf\n", x, ret);
   
   x = 90.0;
   val = PI / 180.0;
   ret = cos( x*val );
   printf("Gia tri cosin cua %lf la bang %lf\n", x, ret);
   
   return(0)
}

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

6. Hàm cosh() trong C

Hàm double cosh(double x) trong Thư viện C trả về hypebolic cosine của x.

Khai báo hàm cosh() trong C

Dưới đây là phần khai báo cho hàm cosh() trong C:

double cosh(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động.

Trả về giá trị:

Hàm này trả về hyperbolic cosine của x.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm cosh() trong C:

#include <stdio.h>
#include <math.h>

int main ()
{
   double x;

   x = 0.5;
   printf("Gia tri hyperbolic cosine cua %lf la bang %lf\n", x, cosh(x));

   x = 1.0;
   printf("Gia tri hyperbolic cosine cua %lf la bang %lf\n", x, cosh(x));

   x = 1.5;
   printf("Gia tri hyperbolic cosine cua %lf la bang %lf\n", x, cosh(x));

   return(0);
}

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

7. Hàm sin() trong C

Hàm double sin(double x) trong Thư viện C trả về sin của góc x (giá trị radian).

Khai báo hàm sin() trong C

Dưới đây là phần khai báo cho hàm sin() trong C:

double sin(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động biểu diễn một góc được diễn đạt bằng giá trị radian.

Trả về giá trị:

Hàm này trả về sin của x.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm sin() trong C:

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

int main ()
{
   double x, ret, val;

   x = 45.0;
   val = PI / 180;
   ret = sin(x*val);
   printf("Sin cua %lf bang %lf", x, ret);
   
   return(0);
}

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

8. Hàm sinh() trong C

Hàm double sinh(double x) trong Thư viện C trả về hyperbolic sine của x.

Khai báo hàm sinh() trong C

Dưới đây là phần khai báo cho hàm sinh() trong C:

double sinh(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động.

Trả về giá trị:

Hàm này trả về hyperbolic sine của x.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm sinh() trong C:

#include <stdio.h>
#include <math.h>

int main ()
{
   double x, ret;
   x = 0.5;

   ret = sinh(x);
   printf("Hyperbolic sine cua %lf bang %lf", x, ret);
   
   return(0);
}

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

9. Hàm tanh() trong C

Hàm double tanh(double x) trong Thư viện C trả về hyperbolic tang của x.

Khai báo hàm tanh() trong C

Dưới đây là phần khai báo cho hàm tanh() trong C:

double tanh(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động.

Trả về giá trị:

Hàm này trả về hyperbolic tang của x.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm tanh() trong C:

#include <stdio.h>
#include <math.h>

int main ()
{
   double x, ret;
   x = 0.5;

   ret = tanh(x);
   printf("Hyperbolic tangent cua %lf bang %lf", x, ret);
   
   return(0);
}

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

10. Hàm exp() trong C

Hàm double exp(double x) trong Thư viện C trả về e mũ x.

Khai báo hàm exp() trong C

Dưới đây là phần khai báo cho hàm exp() trong C:

double exp(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động.

Trả về giá trị:

Hàm này trả về ex.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm exp() trong C:

#include <stdio.h>
#include <math.h>

int main ()
{
   double x = 0;
  
   printf("e^%lf = %lf\n", x, exp(x));
   printf("e^%lf = %lf\n", x+1, exp(x+1));
   printf("e^%lf = %lf\n", x+2, exp(x+2));
   
   return(0);
}

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

11. Hàm frexp() trong C

Hàm double frexp(double x, int *exponent) trong Thư viện C trả về mantissa (phần định trị) và số nguyên được trỏ tới bởi exponent (số mũ). Giá trị kết quả là x = mantissa * 2 ^ exponent.

Khai báo hàm frexp() trong C

Dưới đây là phần khai báo cho hàm frexp() trong C:

double frexp(double x, int *exponent)

Tham số:

x − Đây là giá trị số thực dấu chấm động để được tính toán.

exponent − Đây là con trỏ tới một đối tượng int nơi mà giá trị exponent được lưu trữ.

Trả về giá trị:

Hàm này trả về phần định trị (mantissa) và số nguyên được trỏ tới bởi exponent.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm frexp() trong C:

#include <stdio.h>
#include <math.h>

int main ()
{
   double x = 1024, fraction;
   int e;
   
   fraction = frexp(x, &e);
   printf("x = %.2lf = %.2lf * 2^%d\n", x, fraction, e);
   
   return(0);
}

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

12. Hàm ldexp() trong C

Hàm double ldexp(double x, int exponent) trong Thư viện C trả về x*2exponent.

Khai báo hàm ldexp() trong C

Dưới đây là phần khai báo cho hàm ldexp() trong C:

double ldexp(double x, int exponent)

Tham số:

x − Đây là giá trị số thực dấu chấm động, cũng biểu diễn số chữ số sau dấu phảy có nghĩa.

exponent − Đây là giá trị của exponent.

Trả về giá trị:

Hàm này trả về x * 2 exp

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm ldexp() trong C:

#include <stdio.h>
#include <math.h>

int main ()
{
   double x, ret;
   int n;

   x = 0.65;
   n = 3;
   ret = ldexp(x ,n);
   printf("%f * 2^%d = %f\n", x, n, ret);
   
   return(0);
}

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

13. Hàm log() trong C

Hàm double log(double x) trong Thư viện C trả về lnx.

Khai báo hàm log() trong C

Dưới đây là phần khai báo cho hàm log() trong C:

double log(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động.

Trả về giá trị:

Hàm này trả về lnx.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm log() trong C:

#include <stdio.h>
#include <math.h>

int main ()
{
   double x, ret;
   x = 2.7;

   /* tim gia tri cua log(2.7) */
   ret = log(x);
   printf("log(%lf) = %lf", x, ret);
   
   return(0);
}

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

14. Hàm log10() trong C

Hàm double log10(double x) trong Thư viện C trả về log10(x).

Khai báo hàm log10() trong C

Dưới đây là phần khai báo cho hàm log10() trong C:

double log10(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động.

Trả về giá trị:

Hàm này trả về log10(x), với x lớn hơn 0.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm log10() trong C:

#include <stdio.h>
#include <math.h>

int main ()
{
   double x, ret;
   x = 1000;
  
   /* tim gia tri cua log101000 */
   ret = log10(x);
   printf("log10(%lf) = %lf\n", x, ret);
   
   return(0);
}

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

15. Hàm modf() trong C

Hàm double modf(double x, double *integer) trong Thư viện C trả về phần thập phân của x.

Khai báo hàm modf() trong C

Dưới đây là phần khai báo cho hàm modf() trong C:

double modf(double x, double *integer)

Tham số:

x − Đây là giá trị số thực dấu chấm động.

integer − Đây là con trỏ tới một đối tượng mà phần nguyên được lưu trữ.

Trả về giá trị:

Hàm này trả về phần thập phân của x, có cùng dấu.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm modf() trong C:

#include<stdio.h>
#include<math.h>

int main ()
{
   double x, fractpart, intpart;

   x = 7.123456;
   fractpart = modf(x, &intpart);

   printf("Phan nguyen = %lf\n", intpart);
   printf("Phan thap phan = %lf \n", fractpart);
   
   return(0);
}

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

16. Hàm pow() trong C

Hàm double pow(double x, double y) trong Thư viện C trả về xy.

Khai báo hàm pow() trong C

Dưới đây là phần khai báo cho hàm pow() trong C:

double pow(double x, double y)

Tham số:

  • x − Đây là cơ số, là một giá trị số thực dấu chấm động.
  • y − Đây là số mũ, là một giá trị số thực dấu chấm động.

Trả về giá trị:

Hàm này trả về xy.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm pow() trong C:

#include <stdio.h>
#include <math.h>

int main ()
{
   printf("9.0 ^ 3 = %lf\n", pow(9.0, 3));

   printf("4.05 ^ 2.98 = %lf", pow(4.05, 2.98));
   
   return(0);
}

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

17. Hàm sqrt() trong C

Hàm double sqrt(double x) trong Thư viện C trả về căn bậc hai của x.

Khai báo hàm sqrt() trong C

Dưới đây là phần khai báo cho hàm sqrt() trong C:

double sqrt(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động.

Trả về giá trị:

Hàm này trả về căn bậc hai của x.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm sqrt() trong C:

#include <stdio.h>
#include <math.h>

int main ()
{

   printf("Can bac hai cua %lf bang %lf\n", 4.0, sqrt(4.0) );
   printf("Can bac hai cua %lf bang %lf\n", 5.0, sqrt(5.0) );
   
   return(0);
}

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

18. Hàm ceil() trong C

Hàm double ceil(double x) trong Thư viện C trả về giá trị nguyên nhỏ nhất lớn hơn hoặc bằng x.

Khai báo hàm ceil() trong C

Dưới đây là phần khai báo cho hàm ceil() trong C:

double ceil(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động.

Trả về giá trị:

Trả về giá trị nguyên nhỏ nhất không nhỏ hơn x.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm ceil() trong C:

#include <stdio.h>
#include <math.h>

int main ()
{
   float val1, val2, val3, val4;

   val1 = 1.6;
   val2 = 1.2;
   val3 = 2.8;
   val4 = 2.3;

   printf ("Gia tri cua ceil(%.1f) = %.1lf\n", val1, ceil(val1));
   printf ("Gia tri cua ceil(%.1f) = %.1lf\n", val2, ceil(val2));
   printf ("Gia tri cua ceil(%.1f) = %.1lf\n", val3, ceil(val3));
   printf ("Gia tri cua ceil(%.1f) = %.1lf\n", val4, ceil(val4));
   
   return(0);
}

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

19. Hàm fabs() trong C

Hàm double fabs(double x) trong Thư viện C trả về giá trị tuyệt đối của x.

Khai báo hàm fabs() trong C

Dưới đây là phần khai báo cho hàm fabs() trong C:

double fabs(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động.

Trả về giá trị:

Hàm này trả về giá trị tuyệt đối của x.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm fabs() trong C:

#include <stdio.h>
#include <math.h>

int main ()
{
   int a, b;
   a = 345;
   b = -345;
  
   printf("Tri tuyet doi: |%d| = %lf\n", a, fabs(a));
   printf("Tri tuyet doi: |%d| = %lf\n", b, fabs(b));
   
   return(0);
}

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

20. Hàm floor() trong C

Hàm double floor(double x) trong Thư viện C trả về giá trị nguyên lớn nhất nhỏ hơn hoặc bằng x.

Khai báo hàm floor() trong C

Dưới đây là phần khai báo cho hàm floor() trong C:

double floor(double x)

Tham số:

x − Đây là giá trị số thực dấu chấm động.

Trả về giá trị:

Hàm này trả về số nguyên lớn nhất không lớn hơn x.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm floor() trong C:

#include <stdio.h>
#include <math.h>

int main ()
{
   float val1, val2, val3, val4;

   val1 = 1.6;
   val2 = 1.2;
   val3 = 2.8;
   val4 = 2.3;

   printf("Gia tri cua floor(%.1f) = %.1lf\n", val1, floor(val1));
   printf("Gia tri cua floor(%.1f) = %.1lf\n", val2, floor(val2));
   printf("Gia tri cua floor(%.1f) = %.1lf\n", val3, floor(val3));
   printf("Gia tri cua floor(%.1f) = %.1lf\n", val4, floor(val4));
   
   return(0);
}

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

21. Hàm fmod() trong C

Hàm double fmod(double x, double y) trong Thư viện C trả về phần dư của phép chia x/y.

Khai báo hàm fmod() trong C

Dưới đây là phần khai báo cho hàm fmod() trong C:

double fmod(double x, double y)

Tham số:

x − Đây là giá trị số thực dấu chấm động đóng vai trò là tử số.

y − Đây là giá trị số thực dấu chấm động đóng vai trò là mẫu số.

Trả về giá trị:

Hàm này trả về phần dư của phép chia x/y.

Ví dụ:

Chương trình C sau minh họa cách sử dụng của hàm fmod() trong C:

#include <stdio.h>
#include <math.h>

int main ()
{
   float a, b;
   int c;
   a = 9.2;
   b = 3.7;
   c = 2;
   printf("Phan du cua phep chia %f / %d la %lf\n", a, c, fmod(a,c));
   printf("Phan du cua phep chia %f / %f la %lf\n", a, b, fmod(a,b));
   
   return(0);
}

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