時間サイクルの残りの量を決定する必要があります。CIでこれを行うには、fmodを使用します。しかし、adaでは同様の関数への参照を見つけることができません。それは正確である必要があり、正確さのためにフロートを返す必要があります。
では、Ada 95でフロートの弾性率を決定するにはどうすればよいですか?
elapsed := time_taken mod 10.348;
left := 10.348 - elapsed;
delay Duration(left);
時間サイクルの残りの量を決定する必要があります。CIでこれを行うには、fmodを使用します。しかし、adaでは同様の関数への参照を見つけることができません。それは正確である必要があり、正確さのためにフロートを返す必要があります。
では、Ada 95でフロートの弾性率を決定するにはどうすればよいですか?
elapsed := time_taken mod 10.348;
left := 10.348 - elapsed;
delay Duration(left);
Use the floating point 'Remainder attribute.
Elapsed, Time_Taken : Float;
...
Elapsed := Float'Remainder(Time_Taken, 10.348);
実際の質問に対する回答ではありません。ただし、そのコードの意図を達成するには、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;
私はAdaを知りませんが、それがFloor
あなたが使用できる機能を持っていると仮定しますelapsed := time_taken - Floor(time_taken / 10.348) * 10.348)
.
編集:この目的で Remainder 属性を使用することに関するこの議論も見つけました。