آشنایی با شئ Math
انجام محاسبات ریاضی در برنامهنویسی، امری بسیار معمول و مرسوم است. پیش از این با چند عملگر ریاضی در جاوا اسکریپت آشنا شدیم که اعمال پایهی ریاضی مانند جمع، تفریق، ضرب و ... را انجام میدادند. البته در بسیاری از برنامهها همین اعمال کافی هستند و نیازی به محاسبات پیچیدهتر نیست. اما در برنامههایی که به نوعی برای حل مسائل ریاضی طراحی شدهاند. و یا در برنامههایی که برای عملکرد صحیح بخش خاصی از برنامه، باید یک مسئلهی ریاضی حل شود. نیاز به انجام محاسبات پیچیدهتری خواهیم داشت.
در جاوا اسکریپت شیئی به نام Math وجود دارد که با استفاده از خاصیتها و متدهای این شئ میتوان محاسبات ریاضی پیچیدهتری را انجام داد. قبل از شروع کار با این شئ، باید به این نکته اشاره شود که شئ Math با تمام اشیائی که پیش از این معرفی شدهاند از برخی جهات متفاوت است. این تفاوتها عبارتند از :
- این شئ اصطلاحاً یک شئ Singleton است. به این معنی که در هر برنامه فقط یک نمونه از این شئ میتواند وجود داشته باشد. این برخلاف رفتاری است که پیش از این از اشیاء پیشساختهی جاوا اسکریپت دیده بودیم. مثلاً در هر برنامهای میتوان به هر تعداد اشیائی از نوع Array یا Set و ... ایجاد کرد.
- این شئ از زمان شروع اجرای برنامه تا پایان اجرا، به صورت سراسری در دسترس است و نیازی به تعریف متغیری از نوع Math نخواهیم داشت. این نیز بر خلاف رفتار سایر اشیائی است که پیش از این دیده بودیم. مثلاً برای استفاده از مجموعهها باید با عملگر new یک متغیر جدید از نوع مجموعه (Set) ایجاد میکردیم. اما در مورد شئ Math اینگونه نیست و این شئ از لحظهی شروع برنامه وجود دارد و میتوان از طریق نام این شئ به تمام متدها و خاصیتهای آن دسترسی داشت.
- تمام خاصیتها و متدهای این شئ غیر قابل تغییر (Immutable) هستند. اما خاصیتها و متدهای اشیائی که خودمان تعریف میکردیم قابل تغییر بودند. حتی برخی خاصیتها و متدهای سایر اشیاء پیشساخته در جاوا اسکریپت نیز قابل تغییر هستند. (در فصل ۱۳ با نحوهی تعریف اشیائی مانند شئ Math آشنا خواهید شد)
توجه : در ادامهی این بخش از برخی اصطلاحات و مفاهیم ریاضی استفاده شده است. فرض بر این است که خواننده با معنی و مفهوم این اصطلاحات در ریاضیات آشنا میباشد.
خاصیتهای شئ Math
شئ Math دارای ۸ خاصیت است. این خاصیتها مقدار برخی ثابتهای مهم ریاضی را در خود نگهداری میکنند که عبارتند از :- PI : مقدار عدد پی تا ۱۵ رقم اعشار که برابر است با ۳.۱۴۱۵۹۲۶۵۳۵۸۹۷۹۳
- SQRT2 : مقدار ریشهی دوم (جذر) عدد ۲ تا ۱۶ رقم اعشار که برابر است با ۱.۴۱۴۲۱۳۵۶۲۳۷۳۰۹۵۱
- SQRT1_2 : مقدار ریشهی دوم عدد ۰.۵ تا ۱۶ رقم اعشار که برابر است با ۰.۷۰۷۱۰۶۷۸۱۱۸۶۵۴۷۶
- E : مقدار عدد اویلر (یا عدد نپر) تا ۱۵ رقم اعشار که برابر است با ۲.۷۱۸۲۸۱۸۲۸۴۵۹۰۴۵
- LN2 : مقدار لگاریتم طبیعی عدد ۲ تا ۱۶ رقم اعشار که برابر است با ۰.۶۹۳۱۴۷۱۸۰۵۵۹۹۴۵۳
- LN10 : مقدار لگاریتم طبیعی عدد ۱۰ تا ۱۵ رقم اعشار که برابر است با ۲.۳۰۲۵۸۵۰۹۲۹۹۴۰۴۶
- LOG2E : مقدار لگاریتم عدد اویلر در مبنای ۲ تا ۱۶ رقم اعشار که برابر است با ۱.۴۴۲۶۹۵۰۴۰۸۸۸۹۶۳۴
- LOG10E : مقدار لگاریتم عدد اویلر در مبنای ۱۰ تا ۱۶ رقم اعشار که برابر است با ۰.۴۳۴۲۹۴۴۸۱۹۰۳۲۵۱۸
نمونههای از به کارگیری این خاصیتها در کنسول را در قطعه کد زیر میبینید.
Math.PI;
← 3.141592653589793
Math.E;
← 2.718281828459045
Math.LN2;
← 0.6931471805599453
متدهای شئ Math
شئ Math دارای تعداد زیادی متد برای انجام انواع محاسبات مختلف ریاضی است. بیشتر این متدها به همراه کاربردشان در لیست زیر آمدهاند.- abs(x) : قدر مطلق x را بازمیگرداند.
- sqrt(x) : ریشهی دوم (جذر) x را بازمیگرداند.
- cbrt(x) : ریشهی سوم x را بازمیگرداند.
- ceil(x) : کوچکترین عدد صحیحی که بزرگتر یا مساوی x باشد را بازمیگرداند.
- clz32(x) : ابتدا عدد x را به یک عدد دودویی ۳۲ بیتی تبدیل میکند. سپس تعداد صفرهای قبل از عدد را بازمیگرداند.
- cos(x) : کسینوس زاویهی x را بازمیگرداند.
- cosh(x) : کسینوس هایپربولیک زاویهی x را بازمیگرداند.
- sin(x) : سینوس زاویهی x را بازمیگرداند.
- sinh(x) : سینوس هایپربولیک زاویهی x را بازمیگرداند.
- tan(x) : تانژانت زاویهی x را بازمیگرداند.
- tanh(x) : تانژانت هایپربولیک زاویهی x را بازمیگرداند.
- acos(x) : کسینوس معکوس (arccosine) x را بازمیگرداند.
- acosh(x) : کسینوس معکوس هایپربولیک x را بازمیگرداند.
- asin(x) : سینوس معکوس (arcsince) x را بازمیگرداند.
- asinh(x) : سینوس معکوس هایپربولیک x را بازمیگرداند.
- atan(x) : تانژانت معکوس (arctangent) x را بازمیگرداند.
- atanh(x) : تانژانت معکوس هایپربولیک x را بازمیگرداند.
- atan2(y , x) : تانژانت معکوس y/x را بازمیگرداند.
- exp(x) : عدد اویلر را به توان x رسانده و بازمیگرداند. ( ex )
- expm1(x) : ابتدا عدد اویلر را به توان x میرساند. سپس یک واحد از آن کم کرده و بازمیگرداند. ( ex - ۱ )
- floor(x) : بزرگترین عدد صحیحی که کوچکتر یا مساوی x باشد را بازمیگرداند. (تابع جزء صحیح یا براکت در ریاضیات)
- hypot(x1 , x2 , x3 , ... ) : ابتدا مجموع مربعات کلیهی آرگومانهای ورودی را محاسبه میکند. سپس ریشهی دوم آن را باز میگرداند.
- log(x) : لگاریتم طبیعی عدد x را بازمیگرداند.
- log1p(x) : لگاریتم طبیعی عدد x + ۱ را بازمیگرداند.
- log10(x) : لگاریتم عدد x را در مبنای ۱۰ بازمیگرداند.
- log2(x) : لگاریتم عدد x را در مبنای ۲ بازمیگرداند.
- min(x1 , x2 , x3 , ...) : کوچکترین عدد موجود در آرگومانهای ارسال شده را بازمیگرداند.
- max(x1 , x2 , x3 , ...) : بزرگترین عدد موجود در آرگومانهای ارسال شده را بازمیگرداند.
- pow(x , y) : عدد x را به توان y رسانده و بازمیگرداند. ( xy )
- random() : یک عدد تصادفی بین صفر و یک بازمیگرداند.
- round(x) : عدد x را به نزدیکترین عدد صحیح گرد کرده و بازمیگرداند.
- sign(x) : اگر x مثبت باشد عدد 1+ و اگر x منفی باشد عدد 1- را بازمیگرداند. در صورتی که x صفر باشد نیز عدد صفر را بازمیگرداند.
- trunc(x) : بخش اعشاری عدد x را حذف کرده و بخش صحیح را بازمیگرداند.
نکته : در تمام توابع مثلثاتی، واحد اندازهگیری زاویه رادیان است. در صورت نیاز به تبدیل مقدار زاویه از رادیان به درجه و یا از درجه به رادیان میتوان از رابطهی Deg = Rad * 180 / Math.PI استفاده کرد.
نمونههایی از کاربرد متدهای شئ Math را در قطعه کد زیر مشاهده میکنید. همچنین میتوانید مثالهای بیشتری در رابطه با این متدها را اینجا مشاهده کنید.
Math.abs(-3.3);
← 3.3
Math.sqrt(16);
← 4
Math.cbrt(8);
← 2
Math.sin(Math.PI);
← 0
Math.sin(Math.PI / 2);
← 1
Math.sin(Math.PI / 4);
← 0.7071067811865475
Math.sin(30 * Math.PI / 180); // تبدیل درجه به رادیان
← 0.49999999999999994
Math.acos(1);
← 0
Math.ceil(2.2);
← 3
Math.ceil(-2.2);
← -2
Math.floor(2.2);
← 2
Math.floor(-2.2);
← -3
Math.trunc(2.2);
← 2
Math.trunc(-2.2);
← -2
Math.random();
← 0.2556632409113211
Math.random();
← 0.9150376776449138
Math.hypot(1 , 2 , 5 , 4);
← 6.782329983125269
Math.clz32(30); // 30 = 00000000000000000000000000011110
← 27
Math.pow(2 , 10);
← 1024
Math.min(2 , 10 , -3 , 11);
← -3
Math.max(2 , 10 , -3 , 11);
← 11
نکته : در برخی موارد ممکن است نتایج محاسبات ریاضی کاملاً دقیق نبوده و دارای خطا باشد. مثلاً در قطعه کد فوق میبینید که سینوس زاویه ۳۰ درجه که مقدار دقیق آن ۰.۵ است، با مقداری خطا همراه است. البته میزان این خطا بسیار کوچک و قابل صرف نظر کردن است. اما باید از وجود این خطا آگاه باشید.