Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 #ifndef _random123_u01_dot_h_
00033 #define _random123_u01_dot_h_
00034 
00035 #include "features/compilerfeatures.h"
00036 
00077 
00078 
00079 
00080 
00081 
00082 
00083 #define R123_0x1p_32f (1.f/4294967296.f)
00084 #define R123_0x1p_24f (1.f/16777216.f)
00085 #define R123_0x1fffffep_25f (16777215.f * R123_0x1p_24f * R123_0x1p_24f)
00086 #define R123_0x1p_64 (1./(4294967296.*4294967296.))
00087 #define R123_0x1p_53 (1./(4294967296.*2097152.))
00088 #define R123_0x1fffffffffffffp_54 (9007199254740991.*R123_0x1p_53*R123_0x1p_53)
00089 #define R123_0x1p_32 (1./4294967296.)
00090 #define R123_0x100000001p_32 (4294967297.*R123_0x1p_32*R123_0x1p_32)
00091 
00094 #ifdef __cplusplus
00095 extern "C"{
00096 #endif
00097 
00098 
00099 R123_CUDA_DEVICE R123_STATIC_INLINE float u01_closed_closed_32_24(uint32_t i){
00100     return i*R123_0x1p_32f; 
00101 }
00102 
00103 R123_CUDA_DEVICE R123_STATIC_INLINE float u01_closed_open_32_24(uint32_t i){
00104     return (i>>8)*R123_0x1p_24f; 
00105 }
00106 
00107 R123_CUDA_DEVICE R123_STATIC_INLINE float u01_open_closed_32_24(uint32_t i){
00108     return (1+(i>>8))*R123_0x1p_24f; 
00109 }
00110 
00111 R123_CUDA_DEVICE R123_STATIC_INLINE float u01_open_open_32_24(uint32_t i){
00112     return (1+(i>>8))*R123_0x1fffffep_25f; 
00113 }
00114 
00115 #if R123_USE_U01_DOUBLE
00116 
00117 R123_CUDA_DEVICE R123_STATIC_INLINE double u01_closed_closed_64_53(uint64_t i){
00118     return i*R123_0x1p_64; 
00119 }
00120 
00121 R123_CUDA_DEVICE R123_STATIC_INLINE double u01_closed_open_64_53(uint64_t i){
00122     return (i>>11)*R123_0x1p_53; 
00123 }
00124 
00125 R123_CUDA_DEVICE R123_STATIC_INLINE double u01_open_closed_64_53(uint64_t i){
00126     return (1+(i>>11))*R123_0x1p_53; 
00127 }
00128 
00129 R123_CUDA_DEVICE R123_STATIC_INLINE double u01_open_open_64_53(uint64_t i){
00130     return (1+(i>>11))*R123_0x1fffffffffffffp_54; 
00131 }
00132 
00133 
00134 R123_CUDA_DEVICE R123_STATIC_INLINE double u01_closed_closed_32_53(uint32_t i){
00135     return i*R123_0x100000001p_32; 
00136 }
00137 
00138 R123_CUDA_DEVICE R123_STATIC_INLINE double u01_closed_open_32_53(uint32_t i){
00139     return i*R123_0x1p_32; 
00140 }
00141 
00142 R123_CUDA_DEVICE R123_STATIC_INLINE double u01_open_closed_32_53(uint32_t i){
00143     return (1.+i)*R123_0x1p_32; 
00144 }
00145 
00146 R123_CUDA_DEVICE R123_STATIC_INLINE double u01_open_open_32_53(uint32_t i){
00147     return (0.5+i)*R123_0x1p_32; 
00148 }
00149 #endif 
00150 
00151 #ifdef __cplusplus
00152 }
00153 #endif
00154 
00156 #endif