مهندس موفق الکترونیک

 کتابخانه توابع ریاضی در آردوینو 

کتابخانه توابع ریاضی در آردوینو (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

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>
مطلب پیشنهادی:  مفهوم حوزه متغیر در آردوینو-متغیرهای محلی و متغیرهای سراسری

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *