2010-03-19 15 views
2

我需要确定一个时间周期的剩余数量。要在C中做到这一点,我会使用fmod。但在ada中,我找不到类似的功能。它需要是准确的,并且需要返回一个精度浮点数。如何确定Ada中Float的模数95

那么如何确定Ada 95中Float的模量?

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

Ada 95?这不是所谓的COBOL 2.0吗? – 2010-03-20 01:06:10

回答

4

使用浮点数'Remainder属性。

Elapsed, Time_Taken : Float; 

... 

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

被警告Reresder会返回负数。 if Elapsed <0 then 已用:= 10.384 - 已用; end if; – 2010-04-28 07:39:59

1

我不知道艾达,但假设它有一个Floor功能,你可以使用elapsed := time_taken - Floor(time_taken/10.348) * 10.348)

编辑:我也刚刚发现this关于使用剩余属性为此目的的讨论。

+0

另外请注意,我认为'time_taken'不会是负面的。 – 2010-03-19 07:57:40

+0

参见http://www.adaic.com/standards/95aarm/html/AA-A-5-3.html – trashgod 2010-03-19 09:14:19

+0

Ada有属性;即Float'Floor。 例如Float'Floor(10.5)= 10.0 – 2010-04-28 07:01:48

2

不是您的实际问题的答案;但为了达到这段代码的意图,可以考虑使用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;