草庐IT

c++ - 添加高斯噪声

我有一个.arff文件,其中包含一个float列表。我需要为每个数字添加高斯噪声,在MATLAB中为:m=m+k*randn(size(m)其中m是列表中的数字之一,k是标准偏差,其值为0.1。什么是C++等同于randn()?能举个例子吗? 最佳答案 使用std::normal_distribution使用适当的生成器(std::default_random_engine通常可以工作)。参见http://en.cppreference.com/w/cpp/numeric/random有关C++标准库的所有随机数生成工具的详细信息。

c++ - C++11 : is there a simple way to seed the generator in one place of the code, 中的随机数然后在不同的函数中使用它?

在C++11之前,我使用rand()来自选择在main()中播种(或不播种)生成器非常简单函数(例如),然后在libraryA中使用由libraryB中某个函数生成的随机数。代码如下所示:LibraryB(生成随机数,老式的方式):#include//rand,RAND_MAXdoubleGetRandDoubleBetween0And1(){return((double)rand())/((double)RAND_MAX);}主程序:#include//srand#include//time,clockintmain(){booliWantToSeed=true;//orfalse,

c++ - 在 C++ 中找出随机数生成器的种子

我有一个非托管C++控制台应用程序,我在其中使用了srand()和rand()。我不需要它来解决特定问题,但很好奇:传递给srand()的原始种子是否存储在我可以查询的内存中的某个位置?有没有办法弄清楚种子是什么? 最佳答案 不需要存储种子,只需要存储最后返回的随机数。这是手册页中的示例:staticunsignedlongnext=1;/*RAND_MAXassumedtobe32767*/intmyrand(void){next=next*1103515245+12345;return((unsigned)(next/65536

c# - 在 C++ 中模拟 C# Random()(相同的数字)

有没有办法在C++中实现C#Random()类?我特别需要根据给定的种子生成相同的数字序列。场景:我正在努力通过利用C#中Random()的使用来生成key来“破解”几个加密恶意软件。显然,这对于只有2^32个可能的key,~4.3B个key来说是弱的,这在猜测的可能性范围内。我用C#编写了暴力破解器,但无论我优化多少,它们都相当慢。我想在C++中实现一个bruteforcer以获得最佳效率(“更接近硬件”),因为我可以通过解密部分获得更好的速度优化(例如AES-256通常,将来甚至可以利用GPU),并以指数方式获得更好的输出。显然,Random(seed)!=srand(seed),

C++,范围为 1-6 的随机数

我想知道如何使用rand()方法获取范围为1-6的随机数。这是为了模拟我需要的一个骰子掷骰子来找到3个骰子掷骰子的平均值,所以类型将是双倍的。 最佳答案 这是一个生成1到6之间的随机数的简单示例,我想您可以想出其余的#include#include#includeintmain(){srand(time(0));std::cout 关于C++,范围为1-6的随机数,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

c++ - 随机字符串生成

#include#include#includeusingnamespacestd;char*charStr;intstringLength;voidgenRandom(){staticconstcharalphanum[]="0123456789""!@#$%^&*""ABCDEFGHIJKLMNOPQRSTUVWXYZ""abcdefghijklmnopqrstuvwxyz";for(inti=0;i问题是在你编译的时候出现的。它会编译得很好,但没有任何显示,然后程序将停止运行。所以我的问题是,这段代码有什么问题? 最佳答案 您

C++ 从 0 :n-1 (n > k) without replacement 范围内随机抽取 k 个数

我正在努力将MATLAB模拟移植到C++中。为此,我试图复制MATLAB的randsample()function.我还没有想出一个有效的方法来做到这一点。所以我问大家,在C++中,如何最好地从0:n-1(对于n>k)范围内随机抽取k个数字而不进行替换?我考虑过以下伪代码(灵感来自cppreference.com上的第三个示例),但我觉得它有点hacky:initializevectvofsizenfori=0ton-1v[i]=ishufflevreturnv[0tok-1]这里的缺点也是需要先构建一个庞大的数组。这似乎是缓慢/笨拙的矫枉过正。如果您能提供帮助,我很乐意在这里提供一些

c++ - valgrind:地址 0x5111715 处无法识别的指令

我有一个看起来像这样的函数-std::stringfunc(){std::stringresult;...autoseed=std::random_device()();std::mt19937gen(seed);std::uniform_int_distributiondis(0,61);...returnresult;}它可以在各种编译器及其版本中正常编译,但仍无法通过Ubuntu上的valgrind测试。我明确提到了ubuntu,因为它在我安装了ArchLinux的机器上成功通过。两个valgrind安装报告它们的版本为valgrind-3.11.0唯一的区别是ArchLinux

c++ - 如果我们在不同的机器上将 c++11 mt19937 作为相同的种子,我们会得到相同的随机数序列吗

灵感来自this和类似的问题,我想了解C++11中的mt19937伪数生成器在两台不同的机器上的行为如何,它使用相同的输入作为种子。换句话说,假设我们有以下代码;std::mt19937gen{ourSeed};std::uniform_int_distributiondest{0,10000};intrandNumber=dist(gen);如果我们在不同的时间在不同的机器上尝试这段代码,我们每次会得到相同的randNumber值序列还是不同的序列?无论哪种情况,为什么会这样?进一步的问题:不管种子是什么,这段代码会无限生成随机数吗?我的意思是,比如说,如果我们在一个运行数月不间断运

c++ - 这会根据这些概率给我适当的随机数吗? C++

代码:intrandom=(rand()%7+1)if(random==1){}//num1elseif(random==2){}//num2elseif(random==3||random==4){}//num3elseif(random==5||random==6){}//num4elseif(random==7){}//num5基本上,我希望这些数字中的每一个都具有这些概率:1:1/72:1/73:2/74:2/75:1/7这段代码会给我正确的结果吗?IE。如果这是无限次运行,我会得到正确的频率吗?有没有更短的方法来做到这一点? 最佳答案