بنویسید یک برنامه C که زمان آغاز و پایان یک محاسبه عددی را به صورت تاریخ-زمان دریافت کند، با استفاده از struct tm و تابع mktime آن‌ها را به time_t تبدیل کند، زمان سپری‌شده را محاسبه نماید و با دانستن تعداد عملیات اعشاری انجام‌شده، سرعت اجرای محاسبه را به صورت MFLOPS گزارش دهد.

33.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 05:41

0.0

برای حل، ورودی تاریخ-زمان را به مقادیر year, month, day, hour, min, sec تبدیل کنید، یک struct tm پر کنید (tm_year = year-1900، tm_mon = month-1 و tm_isdst = -1) و با mktime آن را به time_t تبدیل نمایید. زمان سپری‌شده را با difftime یا تفاضل دو time_t به دست آورید و سپس MFLOPS = (تعداد عملیات اعشاری) / (زمان_ثانیه * 1e6) را محاسبه کنید. مراقب بازگشت -1 از mktime و تقسیم بر صفر یا مقادیر بسیار کوچک زمانی باشید و از نوع double برای دقت محاسباتی استفاده کنید؛ header لازم time.h است و برای نمایش و خطایابی مقادیر بزرگ عملیات را انتخاب کنید تا عدد MFLOPS معنی‌دار شود.

توسط پژوهشگر در 198 روز قبل ساعت 05:41
دسته بندی ها: C for beginner
reyhaneh در 198 روز قبل ساعت 05:42

حتماً مقدار بازگشتی mktime را چک کنید (ممکن است -1 برگردد) و tm_isdst را روی -1 قرار دهید تا تغییرات ساعت تابستانی مشکل‌ساز نشوند. برای محاسبه زمان از difftime یا تفاضل دو time_t با نوع double استفاده کنید و از تقسیم بر صفر یا زمان‌های بسیار کوچک که MFLOPS غیرواقعی می‌دهند جلوگیری کنید. اگر دقت بالاتر یا زمان‌سنجی بدون تأثیر منطقه زمانی می‌خواهید، clock_gettime(CLOCK_MONOTONIC, ...) را در نظر بگیرید. همچنین تعداد عمل‌های اعشاری را بزرگ انتخاب کنید و اجرای چندگانه و میانگین‌گیری را برای نتایج پایدار اعمال نمایید.

گزارش

1 پاسخ

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

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