كيفية تحديد معامل تعويم في ADA 95
-
21-09-2019 - |
سؤال
أحتاج إلى تحديد المبلغ المتبقي لدورة الوقت. للقيام بذلك في 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)
.
تحرير: لقد وجدت للتو هذه مناقشة حول استخدام سمة الباقي لهذا الغرض.
لا تنتمي إلى StackOverflow