یک برنامهٔ C++ بنویسید که با استفاده از std::rand (از هدر ) و روش مونت‌کارلو مقدار π را تخمین بزند و نتیجه را برای تعداد نمونهٔ دلخواه چاپ کند.

5.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:40

0.0

برای حل این مسئله از تولید اعداد تصادفی با std::rand استفاده کنید (ترجیحاً با مقداردهی اولیهٔ تصادفی با std::srand و std::time). برای هر نمونه یک نقطه (x,y) در مربع واحد [0,1]×[0,1] تولید کنید و بررسی کنید که آیا این نقطه داخل ربع‌دایرهٔ واحد (x²+y²≤1) قرار دارد؛ نسبت نقاط داخل به کل نمونه‌ها تقریب π/4 را می‌دهد، پس π ≈ 4*(داخل/کل). نکات: از تبدیل به double هنگام تقسیم استفاده کنید، برای دقت بیشتر از تعداد نمونهٔ بزرگ‌تر بهره ببرید و توجه داشته باشید که روش مونت‌کارلو برای محاسبات عددی و پردازش با بازدهٔ بالا مناسب و به‌سادگی قابل موازی‌سازی است.

توسط پژوهشگر در 202 روز قبل ساعت 02:40
دسته بندی ها: C Plus Plus C Plus Plus for beginner
reyhaneh در 202 روز قبل ساعت 08:52

برای تولید عدد تصادفی در [0,1) بهتر است از تبدیل double(std::rand()) / (RAND_MAX + 1.0) استفاده کنید تا بازتولید 1.0 دست کم باشد. قبل از هر چیز با std::srand(std::time(nullptr)) مقداردهی اولیه انجام دهید و این کار را در ابتدای برنامه قرار دهید. هر نقطه (x,y) را از مربع [0,1]×[0,1] با x*x + y*y <= 1 بررسی کنید؛ نسبت نقاط داخل به کل، pi/4 است و در نتیجه pi ≈ 4*(داخل/کل). برای دقت و سرعت، از تعداد نمونه‌های بزرگ استفاده کنید و به‌سادگی می‌توانید با چند نخ موازی‌سازی کنید (مثلاً با OpenMP یا std::thread)، و اگر دقت بیشتری می‌خواهید، به جای std::rand از std::mt19937 به‌همراه توزیع یکنواخت استفاده کنید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری