2

時間サイクルの残りの量を決定する必要があります。CIでこれを行うには、fmodを使用します。しかし、adaでは同様の関数への参照を見つけることができません。それは正確である必要があり、正確さのためにフロートを返す必要があります。

では、Ada 95でフロートの弾性率を決定するにはどうすればよいですか?

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

3 に答える 3

6

Use the floating point 'Remainder attribute.

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 に答える