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