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)
00039 typedef unsigned int uint32_t;
00040 typedef unsigned long long uint64_t;
00041 #define 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)
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 #ifdef __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 #else
00071 inline static double genrand_close_open(void);
00072 inline static double genrand_open_close(void);
00073 inline static double genrand_open_open(void);
00074 #endif
00075
00076 void fill_array_open_close(double array[], int size);
00077 void fill_array_close_open(double array[], int size);
00078 void fill_array_open_open(double array[], int size);
00079 void fill_array_close1_open2(double array[], int size);
00080 char *get_idstring(void);
00081 int get_min_array_size(void);
00082 void init_gen_rand(uint32_t seed);
00083 void init_by_array(uint32_t init_key[], int key_length);
00084
00092 inline static double genrand_close_open(void) {
00093 return genrand_close1_open2() - 1.0;
00094 }
00095
00103 inline static double genrand_open_close(void) {
00104 return 2.0 - genrand_close1_open2();
00105 }
00106
00114 inline static double genrand_open_open(void) {
00115 union {
00116 uint64_t u;
00117 double d;
00118 } conv;
00119
00120 conv.d = genrand_close1_open2();
00121 conv.u |= 1;
00122 return conv.d - 1.0;
00123 }
00124
00125 #endif