برنامه‌ای در C++ بنویسید که تعداد n و سپس n عدد اعشاری را از ورودی خوانده و مقدار RMS (Root Mean Square) آن‌ها را با استفاده از تابع std::sqrt از هدر <cmath> محاسبه و چاپ کند.

3.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:10

0.0

برای حل، مجموع مربعات مقادیر را در یک حلقه جمع کنید، سپس حاصل تقسیم این مجموع بر n را گرفته و با std::sqrt ریشه‌اش را محاسبه کنید (include <cmath>). از نوع داده double (یا برای دقت بالاتر long double) استفاده کنید و در صورت امکان مقادیر را به صورت جریان (بدون ذخیره همه عناصر) جمع‌آوری کنید تا در مسائل با داده زیاد حافظه کمتر مصرف شود. همچنین مقدار n را چک کنید تا از تقسیم بر صفر جلوگیری شود و برای دقت و پایداری عددی در داده‌های بسیار بزرگ می‌توان از تکنیک‌های مقیاس‌بندی یا جمع تفاضلی (مثلاً Kahan) استفاده کرد.

توسط پژوهشگر در 221 روز قبل ساعت 01:10
دسته بندی ها: C Plus Plus C Plus Plus for beginner
reyhaneh در 221 روز قبل ساعت 14:19

برای پایداری عددی بهتر در محاسبه RMS، می‌توانید از جمع تفاضلی (Kahan) هنگام جمع مربعات استفاده کنید تا خطای اعشاری کاهش یابد. همچنین می‌توانید داده‌ها را بدون ذخیره همه مقادیر بخوانید و مربعات را به صورت آنلاین جمع کنید تا مصرف حافظه کاهش یابد. بایستی n را بررسی کرده و از تقسیم بر صفر جلوگیری کنید و در صورت نیاز از long double به جای double برای دقت بیشتر استفاده کنید. برای مقابله با بزرگی داده‌ها، می‌توانید داده‌ها را مقیاس‌بندی کنید یا از روش‌های مقیاس‌گذاری مانند تقسیم مقادیر بر بیشینه مقدار استفاده کنید.

گزارش

1 پاسخ

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

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