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

6.0 بازدید آخرین ویرایش در 223 روز قبل ساعت 01:03

0.0

با استفاده از std::srand(std::time(nullptr)) (نیاز به و ) تنها یک‌بار دانه‌گذاری کنید و سپس برای هر نمونه دو عدد تصادفی در بازه [0,1) با static_cast(std::rand())/RAND_MAX تولید کنید؛ اگر نقطه داخل ربع‌دایره با شعاع 1 قرار گیرد شمارشگر داخل++ شود و در انتها π ≈ 4.0 * inside / N محاسبه و خطای نسبی نسبت به مقدار مرجع نمایش داده شود. نکات: برای تکرارپذیری می‌توانید یک دانه ثابت قبول کنید، از نوع double برای دقت استفاده کنید و برای دقت بیشتر در محاسبات علمی تعداد N را بزرگ انتخاب کنید (در مسائل HPC/محاسبات عددی معمولاً N بسیار بزرگ است).

توسط پژوهشگر در 223 روز قبل ساعت 01:03
دسته بندی ها: C Plus Plus C Plus Plus for beginner
sara در 223 روز قبل ساعت 14:51

برای تکرارپذیری، می‌توانید در صورت نیاز از seed ثابت استفاده کنید یا با استفاده از srand(time(nullptr)) تنها یک‌بار دانه‌گذاری کنید تا نتیجه‌ها در هر اجرا تفاوت داشته باشد. این پیاده‌سازی از static_cast<double>(std::rand())/RAND_MAX برای تولید دو عدد تصادفی در [0,1) استفاده می‌کند و اگر x*x + y*y <= 1 باشد، inside++ می‌شود. pi تخمینی برابر 4.0*inside/N است و خطای نسبی آن نسبت به مقدار مرجع محاسبه و چاپ می‌شود. برای دقت بیشتر از double استفاده کنید و N را بزرگ انتخاب کنید و برای تکرارپذیری یا HPC می‌توانید از seed ثابت یا RNG مدرن‌تری مانند mt19937 بهره ببرید.

گزارش

1 پاسخ

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

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