کتابخانه توابع ریاضی در آردوینو (math.h) شامل تعدادی از توابع پر کاربرد ریاضیاتی به منظور انجام عملیات بر روی اعداد اعشاری است.
کتابخانه ماکروها:
در ادامه لیستی از ماکروهای تعریف شده در فایل سرآمد math.h آورده شده است.
ماکروها | مقدار | توضیحات |
M_E | 2.7182818284590452354 | ثابت e |
M_LOG2E | 1.4426950408889634074
/* log_2 e */ |
لگاریتم e در مبنای 2 |
M_1_PI | 0.31830988618379067154
/* 1/pi */ |
ثابت 1/pi |
M_2_PI | 0.63661977236758134308
/* 2/pi */ |
ثابت 2/pi |
M_2_SQRTPI | 1.12837916709551257390
/* 2/sqrt(pi) */ |
ثابت (2/sqrt(pi |
M_LN10 | 2.30258509299404568402
/* log_e 10 */ |
لگاریتم طبیعی 10 |
M_LN2 | 0.69314718055994530942
/* log_e 2 */ |
لگاریتم طبیعی 2 |
M_LOG10E | 0.43429448190325182765
/* log_10 e */ |
لگاریتم e در مبنای 10 |
M_PI | 3.14159265358979323846
/* pi */ |
ثابت pi |
M_PI_2 | 3.3V1.57079632679489661923
/* pi/2 */ |
ثابت pi/2 |
M_PI_4 | 0.78539816339744830962
/* pi/4 */ |
ثابت pi/4 |
M_SQRT1_2 | 0.70710678118654752440
/* 1/sqrt(2) */ |
ثابت (1/sqrt(2 |
M_SQRT2 | 1.41421356237309504880
/* sqrt(2) */ |
ریشه دوم 2 |
acosf | – | نام مستعار تابع acos() |
asinf | – | نام مستعار تابع asin() |
atan2f | – | نام مستعار تابع atan2() |
cbrtf | – | نام مستعار تابع cbrt() |
ceilf | – | نام مستعار تابع ceil() |
copysignf | – | نام مستعار تابع copysign() |
coshf | – | نام مستعار تابع cosh() |
expf | – | نام مستعار تابع exp() |
fabsf | – | نام مستعار تابع fabs() |
fdimf | – | نام مستعار تابع fdim() |
floorf | – | نام مستعار تابع floor() |
fmaxf | – | نام مستعار تابع fmax() |
fminf | – | نام مستعار تابع fmin() |
fmodf | – | نام مستعار تابع fmode() |
frexpf | – | نام مستعار تابع frexp() |
hypotf | – | نام مستعار تابع hypot() |
INFINITY | – | ثابت INFINITY |
isfinitef | – | نام مستعار تابع isfinite() |
isinff | – | نام مستعار تابع isinf() |
isnanf | – | نام مستعار تابع isnan() |
ldexpf | – | نام مستعار تابع ldexp() |
log10f | – | نام مستعار تابع log10() |
logf | – | نام مستعار تابع log() |
lrintf | – | نام مستعار تابع lrint() |
lroundf | – | نام مستعار تابع lround() |
کتابخانه توابع:
در ادامه لیستی از توابع تعریف شده در فایل سرآمد math.h آورده شده است.
شماره | تابع و توضیحات |
1 |
double acos (double __x) تابع acos() مقدار آرک کسینوس __x را محاسبه می کند. مقدار بازگشتی تابع بین [0, pi] رادیان است. در صورتی که ورودی خارج از محدوده [-1, +1] باشد خروجی خطا خواهیم داشت. |
2 |
double asin (double __x) تابع asin() مقدار آرک سینوس __x را محاسبه می کند. مقدار بازگشتی تابع بین [-pi/2, pi/2] رادیان است. در صورتی که ورودی خارج از محدوده [-1, +1] باشد خروجی خطا خواهیم داشت. |
3 |
double atan (double __x) تابع atan() مقدار آرک تانژانت __x را محاسبه میکند. مقدار بازگشتی تابع بین [-pi/2, pi/2] رادیان است. |
4 |
double atan2 (double __y, double __x) تابع atan2() مقدار آرک تانژانت __y / __x را محاسبه می کند و از علامت اعداد ورودی برای تعیین ربع دایره خروجی استفاده میکند. مقدار بازگشتی تابع بین [-pi, pi] رادیان است. |
5 |
double cbrt (double __x) تابع cbrt() ریشه سوم عدد __x را باز میگرداند. |
6 |
double ceil (double __x) تابع ceil() کوچکترین عدد صحیح بزرگتر یا مساوی یک عدد اعشاری مانند __x را برمیگرداند. |
7 |
static double copysign (double __x, double __y) تابع copysign() مقدار __x را با علامت __y برمیگرداند. این تابع حتی اگر ورودیها صفر باشند یا عدد نباشند نیز عمل میکند. |
8 |
double cos(double __x) تابع cos() کسینوس __x را برمیگرداند. |
9 |
double cosh (double __x) تابع cosh() کسینوس هایپربولیک __x را برمیگرداند. |
10 |
double exp (double __x) تابع exp() مقدار تابع نمایی __x را برمیگرداند. |
11 |
double fabs (double __x) تابع fabs() قدرمطلق عدد __x را برمیگرداند. |
12 |
double fdim (double __x, double __y) تابع fdim() حداکثر مقدار (__x – __y, 0) را برمیگرداند. اگر ورودیها عدد نباشند NAN بازمیگرداند. |
13 |
double floor (double __x) تابع floor() بزرگترین عدد صحیح کوچکتر یا برابر عدد اعشاری __x را برمیگرداند. |
14 |
double fma (double __x, double __y, double __z) تابع fma() بزرگترین عدد صحیح کوچکتر یا برابر عدد اعشاری __x را برمیگرداند. |
15 |
double fmax (double __x, double __y) تابع fmax() حاصل عبارت: (__x * __y) + __z را برمیگرداند اما خروجی را به نوع اعداد ورودی تبدیل نمیکند. این مسئله گاهی اوقات میتواند به بالا رفتن دقت محاسبات کمک کند. |
16 |
double fmin (double __x, double __y) تابع fmin()عدد کوچکتر بین __x و __y را برمیگرداند. اگر یکی از ورودیها عدد نباشد، دیگری در خروجی بازگردانده میشود. اگر هر دو ورودی عدد نباشد NaN بازگردانده میشود. |
17 |
double fmod (double __x, double__y) تابع fmod() باقی مانده اعشاری حاصل تقسیم __x / __y را برمیگرداند. |
18 |
double frexp (double __x, int * __pexp) تابع frexp() یک عدد اعشاری را به یک کسر نرمالیزه شده و توانی از عدد 2 تبدیل میکند. بخش عدد صحیح در یک مقدار صحیح که توسط __pexp اشاره میشود ذخیره سازی میکند. اگر __x یک عدد اعشاری معمولی باشد، تابع frexp() مقدار v را بازمیگرداند که دارای مقداری در بازه [1/2, 1) یا صفر میباشد و مقدار __x برابر v ضرب در توانی از 2 توسط متغیر __pexp خواهد بود. اگر __x صفر باشد، هر دو بخش خروجی صفر خواهد بود. اگر __x یک عدد محدود نباشد، در خروجی همان مقدار __x برگردانده میشود و مقدار __pexp صفر بازگردانده میشود. نکته : در صورت استفاده از اشاره گر صفر از روی یک عضو ذخیره شده پرش خواهیم کرد. |
19 |
double hypot (double __x, double__y) تابع hypot() مقدار sqrt(__x*__x + __y*__y) را برمیگرداند. در واقع خروجی برابر وتر یک مثلث قائم الزاویه با یال های __x و __y خواهد بود یا خروجی فاصله از مبدا تا نقاط (__x, __y) میباشد. استفاده از این تابع به جای استفاده مستقیم از فرمول به کاهش خطاهای حاصله میانجامد. به عنوان مثال در صورت کوچک بودن مقادیر __x و __y ما در محاسبات پاریز نخواهیم داشت یا در محدودهی سرریز نخواهیم داشت. |
20 |
static int isfinite (double __x) تابع isfinite() در صورت محدود بودن __x یک مقدار غیر صفر را بازمیگرداند و در غیراینصورت مثبت با منفی بی نهایت را باز میگرداند. |
21 |
int isinf (double __x) تابع isinf() در صورتی که ورودی __x مثبت بی نهایت باشد مقدار 1 ، در صورتی که برابر منفی بی نهایت باشد مقدار -1 و در غیر اینصورت مقدار صفر را باز میگرداند. نکته : در کامپایلر GCC 4.3 این تابع توسط یک تابع درونی جایگزین خواهد شد که به ازای مثبت و منفی بی نهایت عدد 1 را بازمیگرداند. (gcc bug #35509) |
22 |
int isnan (double __x) تابع isnan() در صورتی که ورودی __x یک عدد نباشد مقدار 1 را باز میگرداند و در غیر اینصورت صفر را باز میگرداند. |
23 |
double ldexp (double __x, int __exp ) تابع ldexp() ورودی اعشاری __x را در مقادیری صحیح از توان 2 ضرب میکند و در خروجی مقدار __x را که در توانهایی از 2 که توسط __exp تعیین میشود ضرب شده است را باز میگرداند. |
24 |
double log (double __x) تابع log() مقدار لگاریتم طبیعی __x را باز میگرداند. |
25 |
double log10(double __x) تابع log10() مقدار لگاریتم طبیعی عدد __x را در مبنای 10 باز میگرداند. |
26 |
long lrint (double __x) تابع lrint() عدد __x را به نزدیک ترین عدد صحیح رند میکند و اعدادی که در بین دو عدد صحیح باشند را به عدد زوج رند میکند (به عنوان مثال هر دو عدد 1.5 و 2.5 به عدد 2 رند میشوند). این تابع مشابه rint() میباشد با تفاوت در نوع خروجی و این که در این تابع امکان سرریز نیز وجود دارد. بازگشتی: مقدار بازگشتی این تابع از نوع long int میباشد. اگر __x یک عدد محدود نباشد، مقدار معادل ثابت LONG_MIN (0x80000000) باز گردانده میشود. |
27 |
long lround (double __x) تابع lround() عدد __x را به نزدیکترین عدد صحیح رند میکند و اعدادی که در بین دو عدد صحیح قرار دارند را به سمت خارج از محدوده صفر رند میکند (به جای رند کردن به نزدیک ترین عدد زوج). این تابع مشابه تابع round() میباشد با تفاوت در نوع خروجی و امکان اتفاق افتادن سرریز در خروجی. بازگشتی: مقدار بازگشتی این تابع عدد رند شده میباشد. اگر __x یک عدد محدود نباشد یا سرریز رخ دهد، مقدار معادل ثابت LONG_MIN (0x80000000) باز گردانده میشود. |
28 |
double modf (double __x, double * __iptr ) تابع modf() عدد ورودی __x را به دو بخش صحیح و کسری تقسیم میکند و هر بخش همان علامت ورودی را خواهد داشت. بخش صحیح به عنوان double ذخیره میشود و توسط اشاره گر __iptr به آن اشاره میشود. |
29 |
float modff (float __x, float * __iptr) نام مستعار تابع modf() |
30 |
double pow (double __x, double __y) این تابع مقدار __x را به توان __y میرساند و نتیجه را بازمیگرداند. |
31 |
double round (double __x) تابع round() عدد __x را به نزدیک ترین عدد صحیح رند میکند و اعدادی که در بین دو عدد صحیح قرار دارند را به سمت خارج از محدوده صفر رند میکند (به جای رند کردن به نزدیک ترین عدد زوج). سرریز ممکن است اتفاق بیفتد. بازگشتی: مقدار بازگشتی این تابع عدد رند شده میباشد. اگر __x یک عدد محدود نباشد خودش بازمیگردد و اگر یک عدد نباشد NAN بازمیگردد. |
32 |
int signbit (double __x) این تابع اگر __x دارای بیت علامت باشد یک مقدار غیر صفر بازمیگرداند. این تابع با `__x < 0.0′ فرق میکند زیرا طبق استاندارد اعداد اعشاری IEEE 754 برای عدد صفر نیز بیت علامت در نظر گرفته میشود. مقایسه `-0.0 < 0.0′ اشتباه است اما `signbit (-0.0)’ یک مقدار غیرصفر را بازمیگرداند. |
33 |
double sin (double __x) توسط این تابع مقدار سینوس __x برحسب رادیان بازگردانده میشود. |
34 |
double sinh (double __x) توسط این تابع مقدار سینوس هایپربولیک __x بازگردانده میشود. |
35 |
double sqrt (double __x) توسط این تابع مقدار ریشه چهارم غیر منفی __x بازگردانده میشود. |
36 |
double square (double __x) توسط این تابع مقدار معادل __x * __x بازگردانده میشود. نکته : این تابع جزء توابع استاندارد C نمیباشد. |
37 |
double tan (double __x) توسط این تابع مقدار تانژانت __x برحسب رادیان بازگردانده میشود. |
38 |
double tanh ( double __x) توسط این تابع مقدار تانژانت هایپربولیک __x بازگردانده میشود. |
39 |
double trunc (double __x) توسط این تابع مقدار __x به نزدیک ترین عدد صحیح که قدرمطلق آن بزرگتر از __x نباشد رند میشود. |
مثال :
مثالی که در زیر آورده شده است نشان دهنده چگونگی استفاده از اکثر توابع موجود در کتابخانه math.h میباشد.
double double__x = 45.45 ; double double__y = 30.20 ; void setup() { Serial.begin(9600); Serial.print("cos num = "); Serial.println (cos (double__x) ); // returns cosine of x Serial.print("absolute value of num = "); Serial.println (fabs (double__x) ); // absolute value of a float Serial.print("floating point modulo = "); Serial.println (fmod (double__x, double__y)); // floating point modulo Serial.print("sine of num = "); Serial.println (sin (double__x) ) ;// returns sine of x Serial.print("square root of num : "); Serial.println ( sqrt (double__x) );// returns square root of x Serial.print("tangent of num : "); Serial.println ( tan (double__x) ); // returns tangent of x Serial.print("exponential value of num : "); Serial.println ( exp (double__x) ); // function returns the exponential value of x. Serial.print("cos num : "); Serial.println (atan (double__x) ); // arc tangent of x Serial.print("tangent of num : "); Serial.println (atan2 (double__y, double__x) );// arc tangent of y/x Serial.print("arc tangent of num : "); Serial.println (log (double__x) ) ; // natural logarithm of x Serial.print("cos num : "); Serial.println ( log10 (double__x)); // logarithm of x to base 10. Serial.print("logarithm of num to base 10 : "); Serial.println (pow (double__x, double__y) );// x to power of y Serial.print("power of num : "); Serial.println (square (double__x)); // square of x } void loop() { }
نتایج:
cos num = 0.10 absolute value of num = 45.45 floating point modulo =15.25 sine of num = 0.99 square root of num : 6.74 tangent of num : 9.67 exponential value of num : ovf cos num : 1.55 tangent of num : 0.59 arc tangent of num : 3.82 cos num : 1.66 logarithm of num to base 10 : inf power of num : 2065.70
امیدوارم این نوشته برایتان مفید واقع شده باشد.
منبع: میکرودیزاینرالکترونیک