【问题标题】:why this function donnot generate random numbers? [closed]为什么这个函数不生成随机数? [关闭]
【发布时间】:2014-11-17 08:14:47
【问题描述】:
#include <memory>
#include <functional>

#include <zmq.hpp>
#include <zhelpers.hpp>   

 void main(){
    char identity[10] = {};
    sprintf(identity, "%04X-%04X", within(0x10000), within(0x10000));
    printf("%s\n", identity);
}

我从这里参考: https://github.com/imatix/zguide/blob/master/examples/C%2B%2B/asyncsrv.cpp

【问题讨论】:

  • 什么是within()?请说明观察到的行为、预期的行为。
  • @DevSolar 也许它是一个函数。我已经为审稿人提供了参考。在链接中
  • “也许”这就是你的答案。您不能只是从网络上复制和粘贴代码 sn-ps 并期望它们能够工作,尤其是如果您不包含相同的标头并链接相同的库。即使这样,您也应该先了解代码...
  • 实际上我已经添加了所有文件,但它仍然生成相同的数字。我确实了解 zeromq 的代码,我正在尝试实现它。这就是我问这个问题的原因。我被困在那里
  • 您发布的代码不包含任何标题,并且您没有声明您正在链接标准库以外的任何内容。如果您与“zeromq”(无论是什么)链接,请说明并相应地标记您的问题。直接链接到所使用的函数(或者更确切地说,它的文档)也会有所帮助。就目前而言,上述内容甚至无法编译。

标签: c++ random zeromq


【解决方案1】:

我不知道within() 做了什么,但您可能想使用C++11 引入的新方法生成随机数。该链接有一个很好的例子。

如果链接在将来某个时间会失效,这里是相关代码:

#include <iostream>
#include <random>
int main {
    // Seed with a real random value, if available
    std::random_device rd;

    // Choose a random number between 1 and 6
    std::default_random_engine engine(rd());
    std::uniform_int_distribution<int> uniform_dist(1, 6);
    int randomNumber = uniform_dist(engine);
    int anotherRandomNumber = uniform_dist(engine);
    std::cout << "Randomly-chosen number: " << randomNumber << '\n';
    std::cout << "Another Randomly-chosen number: " << anotherRandomNumber << '\n';
}

【讨论】:

    【解决方案2】:

    虽然我犹豫回答这样一个糟糕的问题......

    采用 Mike Seymour 发现的within() 的定义,您的代码相当于:

    #include <stdlib.h>
    #include <stdio.h>
    
    #define within(num) (int) ((float) (num) * rand () / (RAND_MAX + 1.0))
    
    void main(){
        char identity[10] = {};
        sprintf(identity, "%04X-%04X", within(0x10000), within(0x10000));
        printf("%s\n", identity);
    }
    

    此代码确实生成一个(伪)随机数。您可能感到困惑的是,它确实会在每次运行程序时生成相同的(伪)随机数。然而,这就是伪随机数生成器:给定相同的种子(因为您没有通过srand() 为生成器播种),它们会生成相同的数字序列。 (因此是“伪”。)

    我强烈建议阅读更多内容,例如 man rand

    【讨论】:

      猜你喜欢
      • 2018-11-23
      • 2011-05-21
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多