关于NIST随机数测试软件报错问题的补充_nist测试报错error: log files could not be opened. max -程序员宅基地

技术标签: matlab  算法  NIST  测试数据与BUG  随机性测试  

NIST随机数测试算法相关测试软件的下载、安装、Cygwin环境配置等等已经有很多博客反复讲述过了,这里不再多说。

但是我发现在我的实际使用过程中遇到了很多意想不到的bug,我也留意到,在相关博客的评论区里,有很多朋友提到了相似的报错内容、相同的困惑。可问题在于CSDN甚至全网都无法找到详细的关于这个算法报错内容的解析。所以这里我尝试总结一下避免错误使用NIST测试软件的Tips,以及部分报错信息的解析。

待测试文件的格式与内容

关于文件格式

Cygwin运行sts-2.1.2算法包时 选择文件格式的提示语如下

Input File Format:
[0] ASCII - A sequence of ASCII 0’s and 1’s
[1]Binary - Each byte in data file contains 8 bits of data

这里主要谈论大家比较常用的[0]ASCII文件

  1. 一般来说,用python或matlab写的算法,导出txt文件是比较方便快捷的。
  2. UTF-8编码的txt文档兼容ASCII。
  3. “A sequence of ASCII 0’s and 1’s”指的不是二进制编码,这个描述指的是所有数据都是二进制数。
  4. 如果采用的是二进制编码文件,请选择第二个选项:Binary。

关于文件内容

  1. 二进制编码的数组可以保证超高精度,不需要担心十进制数值超过matlab/python的整数大小上限以后变为双精度数、导致精度降低。所以生成的随机数数值即使是超级大数也不会影响随机性的判定和测试。
  2. 特殊要求(1):所有二进制数要保证长度相同,如果位数不够,在前面用0补齐。
  3. 特殊要求(2):所有二进制数连续排列,中间不能有空格。
  4. 这里用matlab举例。假设已经生成了一个随机数数组,基于上述要求,导出时不能使用非常快捷的save函数,我们需要手动将数组中的每一个数转为二进制形式后连续写入txt文件。下面我放一段自己的代码,使用的时候请自行更改参数。
    fid = fopen('E:/Final1.txt','w'); 
    %E:/Final1.txt是待检测文件的绝对路径
    for i = 1:1000000
        fprintf(fid, '%s',dec2bin(X(i),32));
    end 
    %1000000是数组长度,32是这个数组中最大的二进制数的长度
    fclose(fid);
    
  5. 一个小建议:生成txt文件以后,可以先打开、缩小来看一看,如果你能看到明显的0、1规律,如下图,那证明你的数组随机性极差,这个算法包无法对你的数组进行测试,最后生成的Finalreport可能是空的0kb,也有可能参数全0。这也是不断报错“igamc underflow”的两大原因之一。
    这样可以目测随机性极差的文件就不需要浪费时间了,建议直接检查算法的正确性。
    二进制txt文件01规律性举例

运行算法时的参数

选择bit流大小和数量

  1. bit流的大小和数量,在很大程度上决定了最后Finalreport能否正常生成。
  2. ./assess 后数值小于1000000时可能无法产生finalreport(即0kb空txt),或是产生全0报告,如下图
    在这里插入图片描述
    其实我这里是有一部分数据的,并不是全0。可以看到明显的对比,下半部分的测试师通过了的。不过数据不够、全0的文件即为上半部分的样子。
  3. 如果数据量不够,./assess 输入较小数值,比如10000,则建议参照此博客的下个部分,采用分段部分测试的方式逐步完成15项检验。
  4. bit流的数量一般要求在10以上比较合理。
  5. 注意:单条bit流的长度 * bit流数量 不能超过你txt文件的数据量,否则同样会不断报错“igamc underflow”!(即第二大报错原因)

选择测试项

根据我个人的尝试,要想一次性完成全部十五项测试,至少需要数量为十万级的随机数,达到百万级更好。
但是部分算法(比如时间戳优化的LCG算法)运算速率很低,产生百万个随机数所需时间太长。那么假设我们只有不到十万个随机数,如果强行跑程序,反而会导致最后报告产生错误。
这里我们建议将15个测试分开为几组来进行测试。
输入文件绝对地址以后你会看到如下指示:

S T A T I S T I C A L T E S T S
_________________________________
[01] Frequency [02] Block Frequency
[03] Cumulative Sums [04] Runs
[05] Longest Run of Ones [06] Rank
[07] Discrete Fourier Transform [08] Nonperiodic Template Matchings
[09] Overlapping Template Matchings [10] Universal Statistical
[11] Approximate Entropy [12] Random Excursions
[13] Random Excursions Variant [14] Serial
[15] Linear Complexity
INSTRUCTIONS
Enter 0 if you DO NOT want to apply all of the
statistical tests to each sequence and 1 if you DO.
Enter Choice:

这里选择0,看到以下指示:

INSTRUCTIONS
Enter a 0 or 1 to indicate whether or not the numbered statistical
test should be applied to each sequence.
123456789111111
      012345

这里的两行数字表示的是1到15,后半段上面的1是十位,下面是个位。在下方对应输入1表示执行该测试,0则表示不执行。

最后,在以下的各个文件夹中查看各部分报告。总的finalreport是没有详细内容的。在这里插入图片描述
目前想到的就是这些,欢迎将漏洞和疑问补充在评论区。我会尝试完善这个回答。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46983031/article/details/115365328

智能推荐

flask-login-程序员宅基地

文章浏览阅读170次。创建扩展对象实例from flask_login import LoginManagerlogin_manager = LoginManager()login_manager.login_view = 'auth.login'# 上面这一句是设置登录视图的名称,如果一个未登录用户请求一个只有登录用户才能访问的视图,# 则闪现一条错误消息,并重定向到这里设置的登录视图。# 如果未设置..._python flask please log in to access this page

html怎么控制top值为0,关于vue滚动scrollTop 赋值一直为0问题-程序员宅基地

文章浏览阅读428次。Vue中document.body.scrollTop的值总为零的解决办法最近在做vue的时候监听页面滚动发现document.body.scrollTop一直为0但是发现document.body.scrollTop一直是0。查资料发现是DTD的问题。页面指定了DTD,即指定了DOCTYPE时,使用document.documentElement。页面没有DTD,即没指定DOCTYPE时,使用d..._滚动给scrolltop赋值

kingbase数据库安装教程(初步使用)(人大金仓)-程序员宅基地

文章浏览阅读2.1k次,点赞25次,收藏21次。人大金仓数据库管理系统KingbaseES(简称:金仓数据库或KingbaseES)是北京人大金仓信息技术股份有限公司自主研制开发的具有自主知识产权的通用关系型数据库管理系统。_kingbase

vue基础笔试题_vue笔试题-程序员宅基地

文章浏览阅读1.2w次,点赞20次,收藏156次。ctions 选项用来定义事件处理方法,用于处理 state 数据。actions 类似于 mutations,不同之处在于 actions 是异步执行的,事件处理函数可以接收 {commit} 对象,完成 mutation 提交,从而方便 devtools 调试工具跟踪状态的 state 变化。..............._vue笔试题

isis协议配置和详解-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏23次。isis是一种与ospf很相似的网络协议(属于动态路由协议),它被应用在巨大规模网络,如运营商以及银行等。同样的它也是基于链路状态算法,支持clnp网络,ip网络。与ospf不同的是,它是基于数据链路层报文传输,而ospf则是在ip层进行计算。它可以自动的发现远程网络,只要网络拓扑结构发生了变化,路由器就会相互交换路由信息,不仅能够自动获知新增加的网络,还可以在当前网络连接失败时找出备用路径。无类..._isis协议配置

Proxychains 手册_proxychains是什么-程序员宅基地

文章浏览阅读1.9k次。名称:Proxychains – 通过代理服务器进行连接语法:proxychains 描述:这个程序会强制所有使用特定tcp连接的客户端所引起的TCP连接走代理通道。它是一种跳板程序。这个软件和sockscap、premo、eborder异曲同工。2.0版支持SOCKS4、SOCKS5、HTTP类的代理。认证方法:socks-“user/pass”,http-“basic_proxychains是什么

随便推点

计算机主机箱内的硬件设备主要有哪些,电脑主机有哪些硬件设备-程序员宅基地

文章浏览阅读5.6k次。电脑主机有哪些硬件设备导语:在台式电脑,我们能看到的最基本的硬件就是一个显示器和主机,然后还包括键盘、鼠标。这样一个基本的电脑就完全了。以下是小编精心整理的电脑硬件知识,希望对您有所帮助。主机上面又分为以下几种硬件:1、主板;主板在主机上是一个板块,它是将电脑上的其他硬件连接在一起,最后在电脑启动的时候,主板上的信息就会传输到电脑上显示出来。2、cpu,cpu处理器的话可能你也已经有所了解了。其实..._主机的硬件设备有哪些

Oracle触发器原理、创建、修改、删除_用oracle创建一个instead of触发器,当在course表中删除数据,不允许在course-程序员宅基地

文章浏览阅读3.7k次,点赞2次,收藏7次。本篇主要内容如下:8.1 触发器类型8.1.1 DML触发器8.1.2 替代触发器8.1.3 系统触发器8.2创建触发器8.2.1 触发器触发次序8.2.2 创建DML触发器8.2.3 创建替代(INSTEAD OF)触发器8.2.3 创建系统事件触发器8.2.4 系统触发器事件属性8.2.5 使用触发器谓词8.2.6 重新编译触发器8.3删除和使用触发器8.4触发器和数据字典8.5数据库触发器的应用举例8.6 触发器的查看8...._用oracle创建一个instead of触发器,当在course表中删除数据,不允许在course表

计算机科学与技术网上书店,计算机科学与技术毕业论文:基于web的网上书店.doc...-程序员宅基地

文章浏览阅读188次。本科毕业论文(设计)题  目  基于web的网上书店学生姓名专业名称  计算机科学与技术指导教师目录1、引言52、系统概述62.1概述62.2 开发平台73.需求分析73.1总体需求描述73.2系统总体功能图73.3系统需要实现的功能83.4业务流程图94.详细设计114.1数据库详细设计114.2建立数据库124.3页面详细设计:185用户手册225.1普通用户:225.2管理员:24参考文献3..._计算机科学与技术毕业设计网上书店

素数求和_输入一个正整数n和n个正整数,统计其中素数的和。-程序员宅基地

文章浏览阅读1.6k次。Description输入一个正整数N和N个正整数,统计其中素数的和。Input输入一个正整数N(1≤N≤100)和N个正整数(≥3),用空格分隔。Output输出所有素数,用空格隔开;再输出这些素数和。Sample Input10 4 5 8 12 13 24 34 37 20 885 1 5 8 12 13Sample Output5 13 37 s=555 13 s=..._输入一个正整数n和n个正整数,统计其中素数的和。

Oracle DB 使用RMAN创建备份2_rman 备份 生成两个文件-程序员宅基地

文章浏览阅读2.5k次。归档备份:概念归档备份:概念 如果需要在指定时间内保留联机备份,RMAN 通常会假定用户可能需要在自执行该备份以来到现在之间的任意时间执行时间点恢复。为了满足这一要求,RMAN 会在此时段内保留归档日志。但是,可能仅需要在指定的时间(如两年)内保留特定备份(并使其保持一致和可恢复)。用户不打算恢复到自执行该备份以后的某一时间点,只是希望能够正好恢复到执行该备_rman 备份 生成两个文件

JS实用技巧之断点调试详解_js断点调试-程序员宅基地

文章浏览阅读9.3k次,点赞9次,收藏58次。引言调试能力是一个程序员的生存根本,可是很多初学者却忽视调试。今天我们就来讨究一下JS的调试技巧。本文章将会详细列举JS相关的各种实用调试技巧。如果您是JS的初学者,那么这篇文章将对您有很大的帮助。为什么要调试?程序就是函数堆砌起来的,程序的运行就是函数的执行过程。而通过JS调试,我们可以更为直观的追踪到在程序运行中,函数的执行顺序,以及各个参数的变化。这样我们就可以快速的定位到问题所在。1. 什么是JS调试?在程序运行中,我们总会遇到各种bug,而通过代码的追踪代码的运行顺序从而定位到问题的过_js断点调试

推荐文章

热门文章

相关标签