در ریاضیات، جذر یا رادیکال به عددی اشاره دارد که وقتی در خودش ضرب میشود، عدد اصلی را تولید میکند. برای مثال برای مثال 9√=3 چون 3×3=9 . این مفهوم در بسیاری از زمینهها همچون علوم پایه، هندسه، محاسبات عددی و برنامهنویسی کاربرد خواهد داشت. در زبان برنامهنویسی ++C، جذر گرفتن از توابع ریاضی پایهای بوده و در کتابخانه این زبان وجود دارد. این تابع میتواند اجازه محاسبه مقادیر جذر را برای انواع دادههای عددی فراهم نماید. در ادامه، نحوه محاسبه رادیکال در سی پلاس پلاس را بررسی خواهیم کرد.
- چناچه پروژه سی پلاس پلاس دارید که احتیاج به جذر گیری در پروژه دارد، با مراجعه به صفحه انجام پروژه سی پلاس پلاس می توانید پروژه خود را سفارش دهید.
- اگر هم پروژه ای دارید که رادیکال گرفتن بخشی از پروزه شما می باشد، پروژه دانشجویی خود را از صفحه انجام خدمات دانشجویی می توانید سفارش دهید.
| بخش | توضیح خلاصه | نکات مهم | مثال/کاربرد |
|---|---|---|---|
معرفی تابع sqrt() | برای محاسبه جذر در ++C استفاده میشود و در کتابخانه <cmath> قرار دارد. | ورودیهای صحیح بهصورت خودکار به double تبدیل میشوند. | sqrt(25) خروجی: 5 |
| انواع توابع جذر | سه نسخه برای دقتهای مختلف وجود دارد. | sqrt(double)، sqrtf(float)، sqrtl(long double) | انتخاب تابع بسته به نوع داده |
تفاوت sqrtl با sqrt | sqrtl با نوع long double کار میکند و دقت بیشتری دارد. | مناسب برای اعداد بسیار بزرگ/کوچک و محاسبات علمی | کاهش خطای گرد کردن |
| محدودیتها و خطاها | وارد کردن عدد منفی باعث خطای دامنه میشود. | خروجی ممکن است NaN یا 0 باشد (وابسته به کامپایلر) | بررسی قبل از محاسبه: if(num < 0) |
| کاربرد در هندسه | استفاده در قضیه فیثاغورث برای محاسبه طول وتر | فرمول: √(a² + b²) | اگر a=3 و b=4 → خروجی: 5 |
| محاسبه چند جذر | امکان گرفتن جذر اعداد مختلف در یک برنامه | پشتیبانی از اعداد اعشاری | sqrt(16) و sqrt(100.5) |
| روش جایگزین (Binary/Newton) | پیادهسازی دستی برای محاسبه جذر بدون <cmath> | با تکرار و نزدیک شدن به جواب دقیق | تابعی با حلقه 100 تکرار برای تقریب |
جذر در آرایهها (valarray) | محاسبه جذر همه عناصر یک آرایه بهصورت برداری | برای مقادیر منفی خروجی nan- میشود | {100,121,-0.5} → {10,11,-nan} |
نحوه استفاده از تابع sqrt() برای محاسبه رادیکال در سی پلاس پلاس
برای محاسبه رادیکال در سی پلاس پلاس میتوانید از تابع sqrt() بهره ببرید. لازم است تابع sqrt() کتابخانه <cmath> را در برنامه وارد نمایید. این تابع برای نوع double تعریف شده است، اما نسخههایی برای float و long double نیز وجود خواهد داشت. اگر عدد ورودی شما صحیح باشد، بهصورت خودکار به double تبدیل میشود. برای مثال:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double num = 25.0;
cout << “جذر ” << num << ” برابر است با ” << sqrt(num) << endl;
return 0;
}
خروجی: جذر 25 برابر است با 5.
- برای مشاهده بیشتر از مثال های تابع sqrt، می توانید به وبسایت programiz مراجعه کنید.
انواع تابعهای جذر (sqrt, sqrtf, sqrtl) در سی پلاس پلاس
دقت کنید برای محاسبه رادیکال در سی پلاس پلاس، توابع مختلفی وجود دارند که میتوانید از آنها برای محاسبه جذر کمک بگیرید. برخی از این توابع عبارتند از:
- sqrt(double): برای محاسبه جذرهای عمومی
- sqrtf(float): برای محاسبات با دقت float
- sqrtl(long double) : برای محاسبات با دقت بالاتر
دقت کنید تابع sqrtl در ++C نسخهای از جذر بوده که میتواند روی داده long double کار کند. بسته به معماری سیستم این نوع داده میتواند 80 بیتی یا حتی 128 بیتی باشد. در مقابل تابع double 64 بیتی است. افزایش طول بیت تابع sqrtl باعث میشود دقت اعشاری بیشتری داشته باشد و خطاهای گرد کردن (round-off error) در آن بسیار کمتر گردد.
کاربرد اصلی تابع sqrtl زمانی است که با اعداد بسیار بزرگ یا بسیار کوچک سروکار دارید و یا میخواهید محاسبات علمی خاصی انجام دهید که در آنها به دقت بالایی نیاز است. در چنین شرایطی استفاده از تابع sqrtl باعث میشود نتیجه به مقدار واقعی نزدیکتر باشد و خطاهای انباشتهشده کمتر شوند.
- درصورتی که شما پروژه سی شارپ، جاوا و یا هر زبان برنامه نویسی دیگری داشتید که ترکیب شده با زبان سی پلاس پلاس بود، برای ثبت سفارش پروژه سی شارپ از صفحه انجام پروژه سی شارپ c#، برای پروژه جاوا از صفحه انجام پروژه جاوا java و برای سایر زبان های برنامه نویسی، از صفحه انجام پروژه برنامه نویسی به راحتی می توانید پروژه خود را به موسسه ما بسپارید.
محدودیتها و خطا در تابع sqrt()
اگر هنگام محاسبه رادیکال در سی پلاس پلاس، عدد منفی را وارد تابع sqrt() نمایید، برنامه دچار domain error میشود و مقدار NaN (Not a Number) را نشان خواهد داد. در برخی پیادهسازیها نیز ممکن است errno به EDOM تنظیم شده و تابع مقدار 0 را بازگرداند. مقدار دقیق رفتار تابع به پیادهسازی کامپایلر وابسته خواهد بود. ازاینرو توصیه میکنیم قبل از استفاده از تابع sqrt()، بررسی کنید که ورودی منفی نباشد. کدنویسی این تابع عبارتند از:
if (num < 0) {
// پیغام خطا یا استفاده از اعداد مختلط
} else {
double r = sqrt(num);
}
آموزش جذر گرفتن با استفاده از sqrt()
یکی از کاربردهای رایج تابعsqrt() در محاسبات هندسی و هنگام یافتن طول وتر با استفاده از قضیه فیثاغورث است.
c = √(a² + b²)
برای این منظور میتوانید از کدنویسی زیر استفاده نمایید:
double a = 3.0, b = 4.0;
double c = sqrt(a*a + b*b); // خروجی: 5.0
مثال دیگر: محاسبه جذر اعداد مختلف در یک برنامه ساده با استفاده از تابع sqrt() است:
cout << sqrt(16) << endl;
cout << sqrt(100.5) << endl;
خروجیها: 4 و مقدار تقریبی برای 100.5
روش باینری یا نیوتن برای محاسبه رادیکال در سی پلاس پلاس
برخی مواقع که تابع cmath در دسترس نیست یا میخواهید الگوریتم را دستی پیادهسازی کنید، میتوانید از روش باینری (Binary Search) استفاده نمایید. کدنویسی این روش به شرح زیر خواهد بود:
double root(double n) {
double lo = min(1.0, n), hi = max(1.0, n), mid;
for (int i = 0; i < 100; ++i) {
mid = (lo + hi) / 2;
if (mid*mid > n) hi = mid;
else lo = mid;
}
return mid;
}
استفاده از جذر در مجموعههای برداری (valarray)
کتابخانه <valarray> اجازه میدهد عملیات برداری را روی آرایهها انجام دهید از جمله محاسبه جذر هر عنصر:
valarray<double> arr = {100, 121, -0.5};
valarray<double> res = sqrt(arr);
در این مثال برای عناصر منفی مقدار -nan تولید میشود:
خروجی: 2, 11, -nan.
نتیجه گیری پایانی درباره رادیکال در سی پلاس پلاس
در این آموزش یاد گرفتیم که محاسبه رادیکال در سی پلاس پلاس به راحتی صورت میگیرد. برای این منطور میتوان از توابع کتابخانه <cmath> کمک گرفت. تابع sqrt() برای نوع double، تابع sqrtf() برای float و تابع sqrtl() برای long double تعریف میشود و هرکدام از آنها متناسب با نیاز برنامهنویس قابل استفاده خواهند بود. در این میان تابعsqrtl به دلیل دارا بودن دقت اعشاری بالاتر، برای محاسبات علمی دقیق یا کار با اعداد بسیار بزرگ و کوچک مناسب خواهد بود.
تابع sqrt() هنگام کار با اعداد منفی در فضای اعداد حقیقی خطا یا مقدار NaN را برمیگرداند و باید پیش از فراخوانی آن، ورودی را بررسی نمایید. میتوانید علاوه بر استفاده مستقیم از تابع، از الگوریتمهای دستی مانند جستوجوی باینری یا روش نیوتن نیز برای محاسبه جذر بهره ببرید. استفاده از تابع valarray نیز به شما کمک میکند بهصورت برداری جذر چندین مقدار را همزمان محاسبه نمایید.
از جمله سوالات پر تکرار در زمینه رادیکال در سی پلاس پلاس
- تفاوت تابع sqrt و sqrtl در چیست؟
sqrtl روی دادههای long double عملکرد مناسبی دارد و تا 18 یا 21 رقم اعشار دقت خواهد داشت. ازاینرو برای محاسبه اعداد بسیار بزرگ یا کوچک مناسب است. - آیا میتوان جذر اعداد منفی را در سی پلاس پلاس محاسبه کرد؟
بله، ولی باید از کتابخانه <complex> برای کار با اعداد مختلط بهره ببرید. - آیا میتوان جذر را بدون استفاده از تابع محاسبه کرد؟
بله، با استفاده از الگوریتمهای عددی مانند باینری یا نیوتن میتوانید جذر اعداد را محاسبه نمایید. - آیا سرعت اجرای تابع sqrtf بیشتر از تابع sqrt است؟
در پردازندههای مدرن، تفاوت سرعت بین توابع کم است اما به طور کلی تابع sqrtf حافظه کمتری اشغال میکند. - آیا تابع sqrt() در همه سیستمعاملها یکسان عمل میکند؟
حدودا بله اما دقت و رفتار تابع بسته به کامپایلر و معماری کمی تفاوت خواهد داشت.


