我怎样才能安全地放下这个
How can I safely downcast this?
编辑:我在VS2012中得到了这个工作(见下面的答案),但它仍然不能在Xcode中正确向下转换。
我试图在c++中从unsigned long向下转换为int,但数据丢失似乎不可避免:
unsigned long bigInt= randomBigNumber;
int x = 2;
然后将一个大数传递给接受有符号整型的函数:
void myFunc(bigInt/(ULONG_MAX/x));
如果randombignnumber是一个重复的随机数——比如在for循环中——我想我应该得到一个相对均匀分布的1和0的数量,但我得到的只是0。
我怎样才能把这个放下来得到一些呢?
谢谢。
Re
”我只得到0
那是因为你除以的是一个相当大的数。如果随机数生成器的范围小于这个大数,则只能得到0。
Re
”我怎么才能把这个向下转换,以便得到一些?
你可以做
myFunc(bigInt % 2);
然而,这对随机性有影响。至少在过去,由于不完善的生成器,伪随机数的最低有效位可能远远不是完全随机的。因此,除了效率之外,你可能还不如这样做:
myFunc((bigInt / 8) % 2);
如果你对好的随机性感兴趣。当然,这都取决于生成器。还有其他更复杂的技术可以提高随机性。
我想到了一个办法:
unsigned long bigInt = randomBigNumber;
unsigned long x = ULONG_MAX / 2;
myFunc(bigInt / x);
这对我有用。我可以生成0和1。注意:我只能让这个工作在VS2012,但不是Xcode。为什么?
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 虚拟决赛作为安全
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将元素添加到数组的线程安全函数?
- C++中的线程安全删除
- 通过网络、跨平台传递std::变体是否安全
- 在std::thread中,joinable()然后join()线程安全吗
- 使用std::istream::peek()总是安全的吗
- 从值小于256的uint16到uint8的Endian安全转换
- 在c++队列中使用pop和visit实现线程安全
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 全局变量 多读取器 一个写入器多线程安全?
- 安全到标准:移动会员?
- AcquireCredentialsHandleA() 返回 PFX 文件的0x8009030e(安全包中没有可用的凭据
- 共享队列的线程安全
- boost::文件系统::recursive_directory_iterator多线程安全
- 跨 DLL 边界访问虚拟方法是否安全/可能?
- C++动态安全 2D 交错阵列