2

我需要确定一个时间周期的剩余量。在 CI 中执行此操作将使用 fmod。但在 ada 中,我找不到类似功能的参考。它需要准确,并且需要返回一个浮点数以确保精度。

那么如何确定 Ada 95 中 Float 的模数?

 elapsed := time_taken mod 10.348;
 left := 10.348 - elapsed;
 delay Duration(left);
4

3 回答 3

6

使用浮点'Remainder属性。

Elapsed, Time_Taken : Float;

...

Elapsed := Float'Remainder(Time_Taken, 10.348);
于 2010-03-19T12:40:03.957 回答
3

不是您实际问题的答案;但是,要实现那段代码的意图,请考虑使用delay until

   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;
于 2010-03-19T17:47:22.587 回答
1

我不认识 Ada,但假设它有一个Floor你可以使用的功能elapsed := time_taken - Floor(time_taken / 10.348) * 10.348)

编辑:我也刚刚发现了关于为此目的使用 Remainder 属性的讨论

于 2010-03-19T07:37:25.520 回答