我正在尝试在C中实现George Marsaglia的Complementary Multiply-With-Carry算法。它似乎在Win7 64位和Linux 32位下工作得很好,但似乎在Win 7 32位下表现得很奇怪。它返回的随机数是32位,但是内部使用的临时值应该是64位,并且它被声明:
unsigned long long t;
我怀疑可能是造成不良行为的原因,所以我的问题是:
类型“long long”是64位吗?是否支持32位Windows?
答案 0 :(得分:7)
如果您的编译器有stdint.h
,我建议改为使用uint64_t
。
答案 1 :(得分:5)
类型long long
保证至少 64位(尽管保证正式采用它必须能够表示的值范围的形式)。
以下内容见C99 standard (link to draft)的§5.2.4.2.1:
- 类型对象的最大值
unsigned long long int
ULLONG_MAX 18446744073709551615 // 2**64 − 1