我需要确定一个时间周期的剩余数量。要在C中做到这一点,我会使用fmod。但在ada中,我找不到类似的功能。它需要是准确的,并且需要返回一个精度浮点数。如何确定Ada中Float的模数95
那么如何确定Ada 95中Float的模量?
elapsed := time_taken mod 10.348;
left := 10.348 - elapsed;
delay Duration(left);
我需要确定一个时间周期的剩余数量。要在C中做到这一点,我会使用fmod。但在ada中,我找不到类似的功能。它需要是准确的,并且需要返回一个精度浮点数。如何确定Ada中Float的模数95
那么如何确定Ada 95中Float的模量?
elapsed := time_taken mod 10.348;
left := 10.348 - elapsed;
delay Duration(left);
使用浮点数'Remainder属性。
Elapsed, Time_Taken : Float;
...
Elapsed := Float'Remainder(Time_Taken, 10.348);
被警告Reresder会返回负数。 if Elapsed <0 then 已用:= 10.384 - 已用; end if; – 2010-04-28 07:39:59
我不知道艾达,但假设它有一个Floor
功能,你可以使用elapsed := time_taken - Floor(time_taken/10.348) * 10.348)
。
编辑:我也刚刚发现this关于使用剩余属性为此目的的讨论。
另外请注意,我认为'time_taken'不会是负面的。 – 2010-03-19 07:57:40
参见http://www.adaic.com/standards/95aarm/html/AA-A-5-3.html – trashgod 2010-03-19 09:14:19
Ada有属性;即Float'Floor。 例如Float'Floor(10.5)= 10.0 – 2010-04-28 07:01:48
不是您的实际问题的答案;但为了达到这段代码的意图,可以考虑使用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 95?这不是所谓的COBOL 2.0吗? – 2010-03-20 01:06:10