相关疑难解决方法(0)

C++中的逻辑XOR运算符?

有这样的事吗?这是我第一次遇到它的实际需要,但我没有看到Stroustrup中列出的一个.我打算写:

// Detect when exactly one of A,B is equal to five.
return (A==5) ^^ (B==5);
Run Code Online (Sandbox Code Playgroud)

但是没有^^运营商.我可以在^这里使用bitwise 并得到正确的答案(无论机器表示真和假)?我从来没有拌&&&,或|||,所以我毫不犹豫地做到这一点与^^^.

我会更自在地编写自己的bool XOR(bool,bool)函数.

c++ operators logical-operators

274
推荐指数
9
解决办法
27万
查看次数

从范围生成随机整数

我需要一个能在给定范围内生成随机整数的函数(包括边界值).我没有不合理的质量/随机性要求,我有四个要求:

  • 我需要快速.我的项目需要产生数百万(有时甚至数千万)的随机数,而我当前的发电机功能已被证明是一个瓶颈.
  • 我需要它合理均匀(使用rand()非常好).
  • min-max范围可以是<0,1>到<-32727,32727>.
  • 它必须是可播种的.

我目前有以下C++代码:

output = min + (rand() * (int)(max - min) / RAND_MAX)
Run Code Online (Sandbox Code Playgroud)

问题是,它并不是真正统一的 - 只有当rand()= RAND_MAX时才返回max(对于Visual C++,它是1/32727).这是小范围的主要问题,如<-1,1>,其中最后一个值几乎从不返回.

所以我抓住笔和纸,并提出了以下公式(它建立在(int)(n + 0.5)整数舍入技巧):

在此输入图像描述

但它仍然没有给我统一的分配.对于值-1,0,0,重复运行10000个样本给出37:50:13的比率.

你能建议更好的配方吗?(甚至整个伪随机数发生器功能)

c++ random

154
推荐指数
8
解决办法
26万
查看次数

利用沙桥的硬件真随机数发生器?

我想知道是否有办法利用英特尔沙桥CPU中的新硬件真数发生器?我读到英特尔的MKL(数学内核库)公开了这个功能,但这需要MKL套件和英特尔编译器,结果相当昂贵.

有没有其他方法在我的C++代码中使用硬件随机数生成器?例如,一个不错的,仅标题库?

c++ hardware numbers intel generator

10
推荐指数
2
解决办法
4087
查看次数

用多个线程填充矢量

我需要std::vector<unsigned int>用随机值填充一个巨大的(7734500元素),我试图与多个线程并行地实现它以实现更高的效率.这是我到目前为止的代码:

std::random_device rd; // seed generator

std::mt19937_64 generator{rd()}; // generator initialized with seed from rd

static const unsigned int NUM_THREADS = 4;


std::uniform_int_distribution<> initialize(unsigned long long int modulus)
{
    std::uniform_int_distribution<> unifDist{0, (int)(modulus-1)};
    return unifDist;
}


void unifRandVectorThreadRoutine
    (std::vector<unsigned int>& vector, unsigned int start,
    unsigned int end, std::uniform_int_distribution<>& dist)
{
    for(unsigned int i = start ; i < end ; ++i)
    {
        vector[i] = dist(generator);
    }
}


std::vector<unsigned int> uniformRandomVector
    (unsigned int rows, unsigned int columns, unsigned long …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading c++11

9
推荐指数
1
解决办法
2174
查看次数

在C中生成随机bool的简单方法是什么?

我想生成一个随机布尔值用于游戏,因此它不需要加密安全.我将stdbool.h在我的代码中使用,我也已经完成了#include <stdlib.h>.优选地,它应该非常快(因为我将生成其中许多),并且它应该能够在C89中完成(只是偏好).我对C++中的这一切并不感兴趣.

以下是我提出的一些方法:

  • 从/ dev/urandom读取,过滤掉单个数字,> 5 = true,<5 = false.
  • 继续调用rand()并过滤掉低/高值.

c random

5
推荐指数
1
解决办法
5581
查看次数