OSDN Git Service

2010-01-27 Vincent Celier <celier@adacore.com>
[pf3gnuchains/gcc-fork.git] / gcc / ada / a-nudira.ads
index 5a685c6..425aa6f 100644 (file)
@@ -6,8 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---                                                                          --
---          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2009, Free Software Foundation, Inc.         --
 --                                                                          --
 -- This specification is derived from the Ada Reference Manual for use with --
 -- GNAT. The copyright notice above, and the license provisions that follow --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
--- for  more details.  You should have  received  a copy of the GNU General --
--- Public License  distributed with GNAT;  see file COPYING.  If not, write --
--- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
--- MA 02111-1307, USA.                                                      --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
 --                                                                          --
--- As a special exception,  if other files  instantiate  generics from this --
--- unit, or you link  this unit with other files  to produce an executable, --
--- this  unit  does not  by itself cause  the resulting  executable  to  be --
--- covered  by the  GNU  General  Public  License.  This exception does not --
--- however invalidate  any other reasons why  the executable file  might be --
--- covered by the  GNU Public License.                                      --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
 --                                                                          --
 -- GNAT was originally developed  by the GNAT team at  New York University. --
 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  Note: the implementation used in this package was contributed by
---  Robert Eachus. It is based on the work of L. Blum, M. Blum, and
---  M. Shub, SIAM Journal of Computing, Vol 15. No 2, May 1986. The
---  particular choices for P and Q chosen here guarantee a period of
---  562,085,314,430,582 (about 2**49), and the generated sequence has
---  excellent randomness properties. For further details, see the
---  paper "Fast Generation of Trustworthy Random Numbers", by Robert
---  Eachus, which describes both the algorithm and the efficient
+--  Note: the implementation used in this package was contributed by Robert
+--  Eachus. It is based on the work of L. Blum, M. Blum, and M. Shub, SIAM
+--  Journal of Computing, Vol 15. No 2, May 1986. The particular choices for P
+--  and Q chosen here guarantee a period of 562,085,314,430,582 (about 2**49),
+--  and the generated sequence has excellent randomness properties. For further
+--  details, see the paper "Fast Generation of Trustworthy Random Numbers", by
+--  Robert Eachus, which describes both the algorithm and the efficient
 --  implementation approach used here.
 
 with Interfaces;
@@ -53,7 +49,16 @@ generic
 
 package Ada.Numerics.Discrete_Random is
 
-   --  Basic facilities.
+   --  The algorithm used here is reliable from a required statistical point of
+   --  view only up to 48 bits. We try to behave reasonably in the case of
+   --  larger types, but we can't guarantee the required properties. So
+   --  generate a warning for these (slightly) dubious cases.
+
+   pragma Compile_Time_Warning
+     (Result_Subtype'Size > 48,
+      "statistical properties not guaranteed for size > 48");
+
+   --  Basic facilities
 
    type Generator is limited private;
 
@@ -62,7 +67,7 @@ package Ada.Numerics.Discrete_Random is
    procedure Reset (Gen : Generator);
    procedure Reset (Gen : Generator; Initiator : Integer);
 
-   --  Advanced facilities.
+   --  Advanced facilities
 
    type State is private;
 
@@ -78,7 +83,9 @@ private
    subtype Int is Interfaces.Integer_32;
    subtype Rst is Result_Subtype;
 
-   type Flt is digits 14;
+   --  We prefer to use 14 digits for Flt, but some targets are more limited
+
+   type Flt is digits Positive'Min (14, Long_Long_Float'Digits);
 
    RstF : constant Flt := Flt (Rst'Pos (Rst'First));
    RstL : constant Flt := Flt (Rst'Pos (Rst'Last));