Как определить модуль поплавка в Аде 95 - PullRequest
2 голосов
/ 19 марта 2010

Мне нужно определить сумму, оставшуюся от временного цикла.Для этого в CI нужно использовать fmod.Но в Аде я не могу найти ссылку на подобную функцию.Он должен быть точным и должен возвращать число с плавающей точкой для точности.

Итак, как мне определить модуль с плавающей точкой в ​​Аде 95?

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

Ответы [ 3 ]

4 голосов
/ 19 марта 2010

Используйте атрибут с плавающей точкой 'Остаток .

Elapsed, Time_Taken : Float;

...

Elapsed := Float'Remainder(Time_Taken, 10.348);
2 голосов
/ 19 марта 2010

Не ответ на ваш актуальный вопрос; но для достижения цели этого фрагмента кода рассмотрите возможность использования задержки до .

   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;
1 голос
/ 19 марта 2010

Я не знаю Аду, но, предполагая, что она имеет функцию Floor, вы можете использовать elapsed := time_taken - Floor(time_taken / 10.348) * 10.348).

Редактировать: Я также только что нашел это обсуждение использования атрибута Remainder для этой цели.

...