我该如何安全地低估这个?

时间:2014-07-11 03:32:39

标签: c++ xcode casting downcast

编辑:我在VS2012中实现了这一点(参见下面的答案),但它仍然没有在Xcode中正确转发。

我试图从无符号长转发到C ++中的int,但数据丢失似乎是不可避免的:

unsigned long bigInt= randomBigNumber;
int x = 2;

然后我将一个大数字传递给一个接受签名整数的函数:

void myFunc(bigInt/(ULONG_MAX/x));

如果randomBigNumber是一个重复的随机数 - 例如在for循环中 - 我想我应该得到一个相对均匀分布的1和0的数量,但我只得到零。

我怎样才能贬低这个以获得一些呢?

感谢。

2 个答案:

答案 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中使用。为什么呢?