سؤال

أحتاج إلى تحديد المبلغ المتبقي لدورة الوقت. للقيام بذلك في CI سوف تستخدم FMOD. ولكن في ADA لا يمكنني العثور على أي إشارة إلى وظيفة مماثلة. يجب أن تكون دقيقة وتحتاج إلى إرجاع تعويم للدقة.

فكيف يمكنني تحديد معامل تعويم في ADA 95؟

 elapsed := time_taken mod 10.348;
 left := 10.348 - elapsed;
 delay Duration(left);
هل كانت مفيدة؟

المحلول

استخدم النقطة العائمة 'بقية ينسب.

Elapsed, Time_Taken : Float;

...

Elapsed := Float'Remainder(Time_Taken, 10.348);

نصائح أخرى

ليست إجابة على سؤالك الفعلي ؛ ولكن ، لتحقيق نية هذا الكود ، فكر في استخدام تأخير حتى.

   Next_Time : Ada.Calendar.Time;
   use type Ada.Calendar.Time;
   Period : constant Duration := 10.348;
begin
   ...
   Next_Time := Ada.Calendar.Clock;
   loop
      -- do stuff
      Next_Time := Next_Time + Period;
      delay until Next_Time;
   end loop;

لا أعرف ADA ، لكن على افتراض أنه يحتوي على ملف Floor وظيفة يمكنك استخدامها elapsed := time_taken - Floor(time_taken / 10.348) * 10.348).

تحرير: لقد وجدت للتو هذه مناقشة حول استخدام سمة الباقي لهذا الغرض.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top