00001
00031 #ifndef DSFMT_H
00032 #define DSFMT_H
00033
00034 #include <stdio.h>
00035
00036 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
00037 #include <inttypes.h>
00038 #elif defined(_MSC_VER) || defined(__BORLANDC__)
00039 typedef unsigned int uint32_t;
00040 typedef unsigned long long uint64_t;
00041 #define inline __inline
00042 #else
00043 #include <inttypes.h>
00044 #if defined(__GNUC__)
00045 #define inline __inline__
00046 #else
00047 #define inline
00048 #endif
00049 #endif
00050
00051 #ifndef PRIu64
00052 #if defined(_MSC_VER) || defined(__BORLANDC__)
00053 #define PRIu64 "I64u"
00054 #define PRIx64 "I64x"
00055 #else
00056 #define PRIu64 "llu"
00057 #define PRIx64 "llx"
00058 #endif
00059 #endif
00060
00061 #ifndef UINT64_C
00062 #define UINT64_C(v) (v ## ULL)
00063 #endif
00064
00065 inline double genrand_close1_open2(void);
00066 #if defined(__GNUC__)
00067 inline static double genrand_close_open(void) __attribute__((always_inline));
00068 inline static double genrand_open_close(void) __attribute__((always_inline));
00069 inline static double genrand_open_open(void) __attribute__((always_inline));
00070 #elif defined(_MSC_VER) && _MSC_VER >= 1200
00071 __forceinline static double genrand_close_open(void);
00072 __forceinline static double genrand_open_close(void);
00073 __forceinline static double genrand_open_open(void);
00074 #else
00075 inline static double genrand_close_open(void);
00076 inline static double genrand_open_close(void);
00077 inline static double genrand_open_open(void);
00078 #endif
00079
00080 void fill_array_open_close(double array[], int size);
00081 void fill_array_close_open(double array[], int size);
00082 void fill_array_open_open(double array[], int size);
00083 void fill_array_close1_open2(double array[], int size);
00084 const char *get_idstring(void);
00085 int get_min_array_size(void);
00086 void init_gen_rand(uint32_t seed);
00087 void init_by_array(uint32_t init_key[], int key_length);
00088
00096 inline static double genrand_close_open(void) {
00097 return genrand_close1_open2() - 1.0;
00098 }
00099
00107 inline static double genrand_open_close(void) {
00108 return 2.0 - genrand_close1_open2();
00109 }
00110
00118 inline static double genrand_open_open(void) {
00119 union {
00120 uint64_t u;
00121 double d;
00122 } conv;
00123
00124 conv.d = genrand_close1_open2();
00125 conv.u |= 1;
00126 return conv.d - 1.0;
00127 }
00128
00129 #endif