Add initial prototype.
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
with
|
||||
ada.Numerics.generic_elementary_Functions;
|
||||
|
||||
package body cached_Trigonometry
|
||||
is
|
||||
Sin_Cache : array (0 .. slot_Count - 1) of Float_Type;
|
||||
Cos_Cache : array (0 .. slot_Count - 1) of Float_Type;
|
||||
|
||||
Pi_x_2 : constant := ada.Numerics.Pi * 2.0;
|
||||
last_slot_Index : constant Float_Type := Float_Type (slot_Count - 1);
|
||||
index_Factor : constant Float_Type := last_slot_Index / Pi_x_2;
|
||||
|
||||
|
||||
|
||||
function Cos (Angle : in Float_Type) return Float_Type
|
||||
is
|
||||
Index : standard.Integer := standard.Integer (Angle * index_Factor) mod slot_Count;
|
||||
begin
|
||||
if Index < 0 then
|
||||
Index := Index + slot_Count;
|
||||
end if;
|
||||
|
||||
return Cos_Cache (Index);
|
||||
end Cos;
|
||||
|
||||
|
||||
|
||||
function Sin (Angle : in Float_Type) return Float_Type
|
||||
is
|
||||
Index : standard.Integer := standard.Integer (Angle * index_Factor) mod slot_Count;
|
||||
begin
|
||||
if Index < 0 then
|
||||
Index := Index + slot_Count;
|
||||
end if;
|
||||
|
||||
return Sin_Cache (Index);
|
||||
end Sin;
|
||||
|
||||
|
||||
|
||||
procedure get (Angle : in Float_Type; the_Cos : out Float_Type;
|
||||
the_Sin : out Float_Type)
|
||||
is
|
||||
Index : standard.Integer := standard.Integer (Angle * index_Factor) mod slot_Count;
|
||||
begin
|
||||
if Index < 0 then
|
||||
Index := Index + slot_Count;
|
||||
end if;
|
||||
|
||||
the_Sin := Sin_Cache (Index);
|
||||
the_Cos := Cos_Cache (Index);
|
||||
end get;
|
||||
|
||||
|
||||
|
||||
|
||||
-- TODO: Tan, arcCos, etc
|
||||
|
||||
|
||||
package Functions is new Ada.Numerics.generic_elementary_Functions (Float_Type);
|
||||
|
||||
begin
|
||||
for Each in cos_Cache'Range
|
||||
loop
|
||||
cos_Cache (Each) := Functions.cos ( Float_Type (Each) / Float_Type (slot_Count - 1)
|
||||
* Pi_x_2);
|
||||
end loop;
|
||||
|
||||
|
||||
for Each in sin_Cache'Range
|
||||
loop
|
||||
sin_Cache (Each) := Functions.sin ( Float_Type (Each) / Float_Type (slot_Count - 1)
|
||||
* Pi_x_2);
|
||||
end loop;
|
||||
end cached_Trigonometry;
|
||||
Reference in New Issue
Block a user