مشخصات مقاله
-
5550
-
0.0
-
63978
-
0
-
0
توابع ریاضی (math) در سی شارپ
وقتی توی برنامهنویسی با دادههای عددی و محاسبات مختلف سروکار داری، خیلی زود متوجه میشی که برای انجام بعضی محاسبات به ابزارهای آماده نیاز داری. در C#، کلاس Math یکی از همین ابزارهاست که مجموعهای از متدهای کاربردی برای انجام عملیات ریاضی در اختیارتون قرار میده.
در ادامه با چند مورد از پرکاربردترین متدهای این کلاس آشنا میشیم و میبینیم هرکدوم دقیقاً برای چه نوع محاسباتی استفاده میشن. آشنایی با این متدها یکی از بخشهای کاربردی در مسیر یادگیری برنامهنویسی با C# محسوب میشه.
توی هر زبان برنامهنویسی، لازم داریم بعضی عملیات ریاضی رو روی دادههای عددی انجام بدیم. بعضی از این عملیات اونقدر پرکاربرد هستن که بهصورت استاندارد در بیشتر زبانهای برنامهنویسی وجود دارن. در C# هم این عملیات با کمک قابلیتها و متدهایی که در کلاس Math تعریف شدن انجام میشن.
سیستم عدد اعشاری (decimal) از منفی بینهایت شروع میشه و تا مثبت بینهایت ادامه پیدا میکنه. به زبان سادهتر، بسته به موقعیت عدد نسبت به صفر، عدد میتونه مثبت یا منفی باشه. البته عدد 0 خنثی در نظر گرفته میشه.
در بعضی از عملیات لازم هست که عدد حتماً مثبت باشه، حتی اگه مقدار اولیه اون منفی باشه. مقدار مطلق عدد x، در صورتی که مثبت باشه، همون x خواهد بود. اما اگه عدد منفی باشه، مقدار مطلقش برابر با مقدار مثبت اون عدد در نظر گرفته میشه.
برای مثال، مقدار مطلق 12 برابر با 12 هست؛ در حالی که مقدار مطلق 12- برابر با 12 خواهد بود. برای به دست آوردن مقدار مطلق یک عدد، کلاس Math متدی به نام Abs داره که در نسخههای مختلف بهصورت overload ارائه شده. دستور زبان (syntax) این متدها به شکل زیره.
public static sbyte Abs(sbyte value);
public static short Abs(short value);
public static int Abs(int value);
public static float Abs(float value);
public static double Abs(double value);
public static long Abs(long value);
public static decimal Abs(decimal value);
متد بالا یک آرگومان دریافت میکنه و مقدار مطلق اون رو برمیگردونه.
using System;
class Program
{
static int Main()
{
int number = -6844;
Console.WriteLine("Original Value = {0}", number);
Console.WriteLine("Absolute Value = {0}\n", Math.Abs(number));
return 0;
}
}
سقف (گرد شده به بالا) یک عدد
فرض کنید عدد اعشاری مثل 12.155 داریم. این عدد بین دو عدد صحیح 12 و 13 قرار گرفته. حالا عددی مثل -24.06 رو در نظر بگیرید که بین اعداد 24- و 25- قرار داره. در این حالت باید دقت کنیم که 24- از 25- بزرگتره.
در ریاضی، سقف یک عدد یعنی نزدیکترین عدد صحیحی که از عدد موردنظر بزرگتر یا مساوی با اون باشه. بنابراین در مثال اول، سقف 12.155 برابر با 13 هست؛ چون 13 نزدیکترین عدد صحیح بزرگتر از 12.155 محسوب میشه.
در مورد -24.06 هم سقف عدد برابر با 24- خواهد بود.
برای به دست آوردن سقف یک عدد، کلاس Math متدی به نام Ceiling داره که در دو نسخه overload ارائه شده. دستور نحوی این دو نسخه به شکل زیره.
// Ceiling() method signature only
public static double Ceiling(double a);
public static decimal Ceiling(decimal d);
متد بالا یک مقدار عددی اعشاری رو بهعنوان آرگومان دریافت میکنه و سقف اون عدد رو به دست میاره.
مثال:
using System;
class Program
{
static int Main()
{
double value1 = 155.55; double value2 = -24.06;
Console.WriteLine("The ceiling of {0} is {1}",
value1, Math.Ceiling(value1));
Console.WriteLine("The ceiling of {0} is {1}\n",
value2, Math.Ceiling(value2));
return 0;
}
}
نتیجه:
The ceiling of 155.55 is 156
The ceiling of -24.06 is -24
Press any key to continue...
علاوه بر کلاس Math، ساختار Double هم پیادهسازی خودش از این متد رو با دستور نحوی زیر ارائه میده.
public static decimal Ceiling(decimal d);
کف (گرد شده به پایین یا همان جزء صحیح) یک عدد
دو عدد اعشاری 128.44 و -36.72 رو در نظر بگیرید. عدد 128.44 بین دو عدد 128 و 129 قرار داره که 128 عدد کوچکتره. از طرف دیگه، -36.72 بین -37 و -36 قرار گرفته و در اینجا -37 مقدار کوچکتر محسوب میشه.
به کمترین یا پایینترین مقدار صحیحی که در عین حال نزدیکترین مقدار به یک عدد باشه، کف اون عدد گفته میشه. برای به دست آوردن کف یک عدد، کلاس Math متدی به نام Floor() در اختیارمون قرار میده. این متد هم در دو نسخه overload شده.
public static double Floor(double d);
public static decimal Floor(decimal d);
متد Floor() مقدار موردنظر رو بهعنوان آرگومان دریافت میکنه و عدد صحیحی (integer) رو برمیگردونه که از آرگومان کوچکتر یا مساوی با اون باشه.
مثال:
using System;
class Program
{
static int Main()
{
double value1 = 1540.25;
double value2 = -360.04;
Console.WriteLine("The floor of {0} is {1}",
value1, Math.Floor(value1));
Console.WriteLine("The floor of {0} is {1}\n",
value2, Math.Floor(value2));
return 0;
}
}
نتیجه زیر به دست میاد:
The floor of 1540.25 is 1540
The floor of -360.04 is -361
Press any key to continue...
بهجای استفاده از کلاس Math، میتونیم از ساختار Double هم استفاده کنیم که متد مخصوص خودش رو برای به دست آوردن کمترین مقدار یا همون کف عدد اعشاری داره. دستور نحوی این متد به شکل زیره:
public static decimal Ceiling(decimal d);
به توان رساندن یک عدد
برای انجام عملیات توان در C# میتونیم از متد Pow در کلاس Math استفاده کنیم. دستور نحوی این متد به شکل زیره.
public static double Pow(double x، double y);
این متد دو آرگومان دریافت میکنه. آرگومان اول یعنی x، عدد پایه است که باید ارزیابی بشه. آرگومان دوم یعنی y که به اون توان گفته میشه، مشخص میکنه آرگومان x به چه توانی برسه.
using System;
class Program
{
static int Main()
{
const double source = 25.38;
const double exp = 3.12;
double result = Math.Pow(source, exp);
Console.WriteLine("Pow({0}, {1}) = {2}\n",
source, exp, result);
return 0;
}
}
نتیجه:
Pow(25.38، 3.12) = 24099.8226934415
Press any key to continue...
مقدار نمایی (The Exponentional)
در C# میتونیم مقدار نمایی یک عدد رو هم محاسبه کنیم. کلاس Math برای این کار متدی به نام Exp() در اختیارمون قرار میده. دستور نحوی این متد به شکل زیره.
public static double Exp (double d);
مثال:
using System;
class Program
{
static int Main()
{
Console.WriteLine("The exponential of {0} is {1}",
709.78222656, Math.Exp(709.78222656));
return 0;
}
}
نتیجه به شکل زیر به دست میاد.
The exponential of 709.78222656 is 1.79681906923757E+308
Press any key to continue...
اگه مقدار x از عدد تقریبی 708.395996093- کوچکتر باشه، مقدار صفر برگردونده میشه و وضعیت پاریز (underflow) اتفاق میافته. از طرف دیگه، اگه مقدار آرگومان x از عدد تقریبی 709.78222656 بزرگتر باشه، وضعیت سرریز (overflow) رخ میده.
لگاریتم طبیعی
برای محاسبه لگاریتم طبیعی یک عدد میتونیم از متد Math.Log() استفاده کنیم. این متد به دو شکل ارائه میشه که یکی از اونها برای محاسبه لگاریتم در مبنای ده استفاده میشه.
public static double Log(double d);
مثال:
using System;
class Program
{
static int Main()
{
double log = 12.48D;
Console.WriteLine("Log of {0} is {1}", log, Math.Log(log));
return 0;
}
}
نتیجه به شکل زیر به دست میاد:
Log of 12.48 is 2.52412736294128
Press any key to continue...
لگاریتم پایهی 10
متد Math.Log10() برای محاسبه لگاریتم پایهی 10 یک عدد استفاده میشه. دستور نحوی این متد به صورت زیره.
public static double Log10(double d);
متد Math.Log10() لگاریتم پایهی 10 یک عدد رو محاسبه میکنه. دستور نحوی متد به شکل زیره.
y = log10x
که معادل x = 10y است.
مثال:
using System;
class Program
{
static int Main()
{
double log10 = 12.48D;
Console.WriteLine("Log of {0} is {1}", log10, Math.Log10(log10));
return 0;
}
}
نتیجه به شکل زیر به دست میاد:
Log of 12.48 is 1.09621458534641
Press any key to continue...
لگاریتم به هر مبنایی
متد Math.Log() یک نسخهی دیگه هم داره که به شما اجازه میده مبنای دلخواهتون رو برای محاسبه لگاریتم مشخص کنید. دستور نحوی این نسخه به شکل زیره.
public static double Log(double a, double newBase);
مقداری که میخوایم لگاریتمش رو محاسبه کنیم، بهعنوان آرگومان اول به متد داده میشه. آرگومان دوم هم به شما اجازه میده مبنای دلخواه لگاریتم رو مشخص کنید. این متد از فرمول زیر استفاده میکنه:
Y = logNewBaseX
که با فرمول زیر برابره:
x = NewBasey
مثال:
using System;
class Program
{
static int Main()
{
double logN = 12.48D;
Console.WriteLine("Log of {0} is {1}", logN, Math.Log(logN, 4));
return 0;
}
}
نتیجه:
Log of 12.48 is 1.82077301454376
Press any key to continue...
ریشهی دوم / جذر
میتونیم ریشهی دوم یک عدد مثبت اعشاری رو هم به دست بیاریم. برای این کار، کلاس Math متدی به نام Sqrt داره که دستور نحوی اون به شکل زیره.
public static double Sqrt(double d);
متد بالا یک آرگومان دریافت میکنه که باید یک عدد مثبت با ممیز شناور باشه. بعد از انجام محاسبه، متد مقدار ریشهی دوم (جذر) x رو برمیگردونه.
using System;
class Program
{
static int Main()
{
double sqrt = 8025.73D;
Console.WriteLine("The square root of {0} is {1}", sqrt, Math.Sqrt(sqrt));
return 0;
}
}
نتیجه:
The square root of 8025.73 is 89.5864387058666
Press any key to continue...