2

我正在尝试使用这个顽固的 repo 来测试数字流的随机性(https://github.com/reubenhwk/diehard)。它为它读取的文件类型提供了这些细节:

然后命令 diehard 将提示输入要测试的文件的名称。

该文件必须是 10 到 1200 万字节的 form="unformatted",access="direct" 二进制文件。

这些是特定于 fortran 的文件约定,不是吗?问题是,我正在使用 lfsr-generator 生成我的随机二进制流,这是在 C 语言中。我尝试fputc将二进制流写入文本文件或.bin文件,但顽固分子似乎不接受它。

我没有使用fortran的经验。有没有办法使用 C 创建这种文件类型?我是否只需要硬着头皮让 C 调用创建文件的 fortran 子例程?这是我的C代码供参考:

#include <stdio.h>

int main(void)
{
  FILE *fp;
  fp=fopen("numbers", "wb");

  const unsigned int init = 1;
  unsigned int v = init;
  int counter = 0;

  do {
    v = shift_lfsr(v);
    fputc( (((v & 1) == 0) ? '0' : '1'), fp);
    counter += 1;
  } while (counter < 11000000);
}
4

1 回答 1

3

您正在创建二进制文件就好了。您的问题是您每个字节仅写入一个随机位(并将其扩展为文本)。顽固分子希望每一点都是随机的。所以在你写之前一次累积 8 位:

do {
  int b = 0;
  for (int i = 0; i < 8; i += 1) {
    v = shift_lfsr(v);
    b <<= 1;
    b |= (v & 1);
  }
  fputc(b, fp);
  . . .
于 2017-08-31T17:14:11.260 回答