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

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

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

 

امیدوارم این نوشته برایتان مفید واقع شده باشد.

 

منبع:  میکرودیزاینرالکترونیک

 

مطلب قبلیبردهای آردوینو Due و Zero
مطلب بعدیکد رنگی خازن

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید