Pergunta

Preciso determinar a quantidade restante de um ciclo de tempo. Para fazer isso no CI, usaria o FMOD. Mas na ADA não encontro referência a uma função semelhante. Precisa ser preciso e precisa devolver um flutuador para precisão.

Então, como faço para determinar o módulo de um flutuador na Ada 95?

 elapsed := time_taken mod 10.348;
 left := 10.348 - elapsed;
 delay Duration(left);
Foi útil?

Solução

Use o ponto flutuante 'Restante atributo.

Elapsed, Time_Taken : Float;

...

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

Outras dicas

Não é uma resposta para sua pergunta real; Mas, para alcançar a intenção dessa parte do código, considere usar Atraso até.

   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;

Eu não conheço Ada, mas assumindo que ele tem um Floor função que você poderia usar elapsed := time_taken - Floor(time_taken / 10.348) * 10.348).

Edit: eu também acabei de encontrar isto discussão sobre o uso do atributo restante para esse fim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top