یک برنامهٔ 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 هنگام تقسیم استفاده کنید، برای دقت بیشتر از تعداد نمونهٔ بزرگتر بهره ببرید و توجه داشته باشید که روش مونتکارلو برای محاسبات عددی و پردازش با بازدهٔ بالا مناسب و بهسادگی قابل موازیسازی است.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای تولید عدد تصادفی در [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 بههمراه توزیع یکنواخت استفاده کنید.
گزارش