编辑:我在VS2012中实现了这一点(参见下面的答案),但它仍然没有在Xcode中正确转发。
我试图从无符号长转发到C ++中的int,但数据丢失似乎是不可避免的:
unsigned long bigInt= randomBigNumber;
int x = 2;
然后我将一个大数字传递给一个接受签名整数的函数:
void myFunc(bigInt/(ULONG_MAX/x));
如果randomBigNumber是一个重复的随机数 - 例如在for循环中 - 我想我应该得到一个相对均匀分布的1和0的数量,但我只得到零。
我怎样才能贬低这个以获得一些呢?
感谢。
答案 0 :(得分:1)
RE
“我只收到零
那是因为你除了一个相当大的数字。如果随机数生成器的范围小于该大数,则只能得到零。
RE
“我该如何转发这些以获得一些?
你可以做到
myFunc(bigInt % 2);
然而,对随机性有影响。由于不完美的发生器,至少旧的伪随机数的最低有效位可能非常小于完全随机。因此除了效率之外,你可能会做得更好。
myFunc((bigInt / 8) % 2);
如果你对随机性很感兴趣。这一切都取决于发电机当然。还有其他更精细的技术可以改善随机性。
答案 1 :(得分:0)
我想到了一个方法:
unsigned long bigInt = randomBigNumber;
unsigned long x = ULONG_MAX / 2;
myFunc(bigInt / x);
这对我有用。我能够生成零和一。 注意:我只能在VS2012中使用它,但不能在Xcode中使用。为什么呢?