1. -- 
  2. -- Jan & Uwe R. Zimmer, Australia, July 2011 
  3. -- 
  4.  
  5. with Float_Type; use Float_Type; 
  6.  
  7. package Quaternions is 
  8.  
  9.    type Quaternion_Real is record 
  10.       w, x, y, z : Real; 
  11.    end record; 
  12.  
  13.    function "abs" (Quad : Quaternion_Real) return Real; 
  14.    function Unit  (Quad : Quaternion_Real) return Quaternion_Real; 
  15.    function Conj  (Quad : Quaternion_Real) return Quaternion_Real; 
  16.    function "-"   (Quad : Quaternion_Real) return Quaternion_Real; 
  17.  
  18.    function "+"   (Left, Right : Quaternion_Real) return Quaternion_Real; 
  19.    function "-"   (Left, Right : Quaternion_Real) return Quaternion_Real; 
  20.    function "*"   (Left, Right : Quaternion_Real) return Quaternion_Real; 
  21.    function "/"   (Left, Right : Quaternion_Real) return Quaternion_Real; 
  22.  
  23.    function "*"   (Left : Quaternion_Real; Right : Real)            return Quaternion_Real; 
  24.    function "/"   (Left : Quaternion_Real; Right : Real)            return Quaternion_Real; 
  25.    function "*"   (Left : Real;            Right : Quaternion_Real) return Quaternion_Real; 
  26.    function "/"   (Left : Real;            Right : Quaternion_Real) return Quaternion_Real; 
  27.  
  28.    function Image (Quad : Quaternion_Real) return String; 
  29.  
  30. end Quaternions;