当前位置: 首页 > 知识库问答 >
问题:

我如何解释《为大正义而战》的结果

汪阳辉
2023-03-14

这是一个关于SO问题的问题;我不认为它属于meta,尽管按照定义它是sp,但如果有人觉得它应该去数学、交叉验证等,请让我知道。

背景:@ForceBru问了一个关于如何使用rand()生成64位随机数的问题@nwellnhof提供了一个被接受的答案,基本上取5个随机数的低15位(因为MAXRAND显然在至少一些编译器上只能保证15位),然后将它们粘在一起,然后丢弃前11位(15*5-64=11)@NikBougalis评论说,虽然这看起来是合理的,但它不会通过许多随机性的统计测试@Foon(我)要求提供一个引用或一个测试失败的例子@NikBougalis的回答没有解释我@戴维·斯沃茨建议与铁杆队比赛。

所以,我跑得更厉害了。我针对有问题的算法运行了它

unsigned long long llrand() {
    unsigned long long r = 0;

    for (int i = 0; i < 5; ++i) {
        r = (r << 15) | (rand() & 0x7FFF);
    }

    return r & 0xFFFFFFFFFFFFFFFFULL;
}

为了进行比较,我还只针对兰特()和8位兰特()运行它。

void rand_test()
{
int x;
srand(1);
  while(1)
    {
      x = rand();
      fwrite(&x,sizeof(x),1,stdout);
    }

void rand_byte_test()
{
  srand(1);
  while(1)
    {
      x = rand();
      c = x % 256;
      fwrite(&c,sizeof(c),1,stdout);
    }
}

有问题的算法通过两个测试返回,显示ntuple=28的rgb_laged_sum和ntuple=8的一个sts_serials的弱性。

仅仅使用rand()在许多测试中都失败了,大概是因为我取了一个有15位随机性的数字,并将其冒充为32位随机性。

一次使用低8位的rand()对于具有 ntuple 2 的rgb_lagged_sum而言,恢复为弱,并且(编辑)dab_monobit失败,元组为 12

我的问题是:

  1. 我是否正确地解释了8位随机测试的结果,也就是说,如果其中一个测试(标记为“良好”;根据记录,对于标记为“可疑”的较难的测试之一,它也会返回为弱测试)是弱测试,一个是失败测试,那么应该怀疑rand()的随机性
  2. 我是否正确解释了测试算法的结果(即,这也应该是轻微怀疑的)
  3. 给出了返回为弱测试的描述(例如,对于sts_serial,查看特定大小的位模式分布是否有效),我是否能够确定可能的偏差
  4. 如果3,既然我不是,有人能指出我应该看到什么吗

编辑:理解rand()并不一定会很好。此外,我试图思考哪些值不太可能出现,并推测可能是零、最大值或重复的数字……但做了1000000000次测试,该比率非常接近每2^15次中1次的预期值(例如,在1000000000次运行中,我们看到30512个零、30444个最大值和30301次重复,bc表示30512×2^15是999817216;其他运行具有类似的比率,包括最大值和/或重复值大于零的情况。

共有1个答案

边霄
2023-03-14

当你更努力地奔跑时,你真正需要注意的列是p值列。

p值列本质上说:“这是真实随机数产生这个结果的概率。”你希望它在0和1之间均匀分布。

您还需要对可疑病例多次运行它。例如,如果你有一个p值为(例如).03的列,那么如果你重新运行它,你仍然有.03(而不是一些更高的值),那么你可以有很高的把握,你的随机数生成器在该测试中表现不佳,这不仅仅是3%的侥幸。但是,如果您获得较高的值,那么您可能会看到统计上的侥幸。但它是双向的。

最终,了解随机或伪随机过程的事实是困难的。但是有了死硬分子的武装,你对很多事情都有了大概的了解。

 类似资料:
  • 我有以下来自weka项目的结果,我在理解它们的含义方面有一些问题。weka结果我知道正确分类实例的百分比通常称为准确性或样本准确性,但我不明白这意味着什么以及它向我展示了什么。我可以从中获得什么信息?正确分类的实例和不正确的实例是什么?同样在混淆矩阵上,我知道四个数字的总和是我给程序的数据的数量,但为什么在这样的网格中有四个数字。您可以提供的任何信息都会很有帮助,谢谢。

  • 我试图使用JDK1.8.0_xxx连接到jms服务,但遇到ssl握手错误。但是,我不能真正理解javax.net.debug的输出。 在日志片段的上面是我的问题: 1。这些是指我的JDK吗? 如果我对以上日志的理解是正确的,那么下面的日志会让我困惑。我尝试使用相同的jdk连接到另一个服务器,并在调试日志下面。 希望我的问题足够清楚,并感谢所有的帮助。谢了。

  • 我有一个任务要处理文件https://github.com/mledoze/countries/blob/master/countries.json,这个文件相当大。首先,我用下载了它,并尝试使用0元素: 然而,整个json文件被识别为“str”,而作为0元素,我收到的只是“[”,我该如何修复这个问题呢?

  • 这里已经有很多问题了,但我还是会继续。这是一个简单的脑力操翻译。我想出了所有其他符号,但我不知道如何实现循环。有人能帮忙吗? 我有一种感觉,我需要使用Stack,但我似乎不知道如何使用。我以前构建过表达式计算器。。。这需要同样的逻辑吗?

  • 问题内容: 我是jstat工具的新手。因此,我做了如下示例。 结果表明什么?哪些列需要注意可能的内存问题,例如内存泄漏等。 问题答案: 请参阅文档: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html 基本上,一行是一个时间点。这些列显示了有关JVM内存区域(Survivor,Eden等)的数据,如果不了解JV

  • 我不熟悉jstat工具。因此,我做了如下样本。 这个结果表明了什么?哪些列需要注意可能的内存问题,例如内存泄漏等。