精华内容
下载资源
问答
  • php 判断参数范围

    2015-11-16 15:56:34
    $p = 8; $t = $p > 5 ? $p : 5; $t = $t $t : 10; echo $t; 这样判断是不是很复杂 试试下面的方法吧 $p = 8; echo min(max($p,5),10);
    $p = 8;
    $t = $p > 5 ? $p : 5;
    $t = $t < 10 ? $t : 10;
    echo $t;

    这样判断是不是很复杂

    试试下面的方法吧

    $p = 8;
    echo min(max($p,5),10);


    展开全文
  • 使用背景 目前在项目中,参数校验的工作都在前端完成,而后端接口只处理业务逻辑,但是这种方式不太...格式化校验,以及参数可选范围的校验,这样既能规避大部分因参数缺失而产生的系统异常,也能在接口联调阶段,...

    使用背景

    目前在项目中,参数校验的工作都在前端完成,而后端接口只处理业务逻辑,但是这种方式不太合理,绕过页面直接进行http请求,会有系统异常以及脏数据的风险,所以推荐使用Bean Validation 基于 JSR 303 - Bean Validation参数校验框架在后端接口做参数校验,格式化校验,以及参数可选范围的校验,这样既能规避大部分因参数缺失而产生的系统异常,也能在接口联调阶段,提高联调效率,减少前后端同学在联调时排查问题的时间

    Hibernate Validator 是 Bean Validation 的参考实现。Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,目前已升级到Bean Validation 2.0 / JSR - 380,除此之外还有一些附加的 constraint。该Hibernate不是ORM的Hibernate

    举例Bean Validation 中的 constraint (约束,限制),Bean Validation 的注解在javax.validation.constraints下

    约束 限制
    @Null 被注释的元素必须为 null
    @NotNull 被注释的元素必须不为 null
    @AssertTrue 被注释的元素必须为 true
    @AssertFalse 被注释的元素必须为 false
    @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
    @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
    @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
    @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
    @Size(max, min) 被注释的元素的大小必须在指定的范围内
    @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
    @Past 被注释的元素必须是一个过去的日期
    @Future 被注释的元素必须是一个将来的日期
    @Pattern(value) 被注释的元素必须符合指定的正则表达式

    Hibernate Validator 附加的 constraint / Hibernate Validator是JSR - 303 的最好实现,目前规范已升级到 JSR

    约束 限制
    @Email 被注释的元素必须是电子邮箱地址
    @Length 被注释的字符串的大小必须在指定的范围内
    @NotEmpty 被注释的字符串的必须非空
    @Range 被注释的元素必须在合适的范围内

    使用方法

    Bean Validation 是JDK 1.6 +后内置的,包名为javax.validation.constraints

    Hibernate Validator 则需要引入jar包,包名为org.hibernate.validator.constraints

    POM.xml

    
     

    <dependency>

        <groupId>org.hibernate</groupId>

        <artifactId>hibernate-validator</artifactId>

        <version>6.0.1.Final</version> 

    </dependency>

    实体类

    import org.hibernate.validator.constraints.Email;

    import org.hibernate.validator.constraints.Length;

    import org.hibernate.validator.constraints.Range;

    import javax.validation.constraints.Max;

    import javax.validation.constraints.Min;

    import javax.validation.constraints.NotNull;

    import javax.validation.constraints.Past;

    import java.util.Date;

     

    public class ValidationDemo {

        private String id;

     

        @Length(min = 2, max = 6, message = "用户名长度要求在{min}-{max}之间")

        @NotNull(message = "用户名不可为空")

        private String userName;

     

        @Email(message = "邮箱格式错误")

        private String email;

     

        @Past(message = "出生日期错误")

        private Date birthDay;

     

        @Min(value = 18, message = "年龄错误")

        @Max(value = 80, message = "年龄错误")

        private Integer age;

     

        @Range(min = 0, max = 1, message = "性别选择错误")

        private Integer sex;

    }

    
     

    关于@Valid和Validated的比较,根据实际需求需求选择

    @Valid : 没有分组功能,可以用在方法、构造函数、方法参数和成员属性(field)上,如果一个待验证的pojo类,其中还包含了待验证的对象,需要在待验证对象上注解@valid,才能验证待验证对象中的成员属性

    @Validated :提供分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制,用在类型、方法和方法参数上。但不能用于成员属性(field)。

    Controller

    -- @Valid 表示对该实体进行校验

    -- BindingResult 则保存对参数的校验结果

    @RequestMapping(value = "validation", method = RequestMethod.POST)

    public JsonResult validation(@Valid @RequestBody ValidationDemo demo, BindingResult result) {

        JsonResult jsonResult = new JsonResult();

        if (result.hasErrors()) {

            result.getAllErrors().forEach(err -> {

                jsonResult.setCode(ApiConstants.JsonResult.FAIL);

                jsonResult.setMsg(err.getDefaultMessage());

            });

        }

        return jsonResult;

    }

    RequestBody

    {

      "age": 19,

      "birthDay": "2019-04-14T09:05:39.604Z",

      "email": "string",

      "id": "string",

      "sex": 0,

      "userName": "string"

    }

    Response

    {

      "code": 1,

      "msg": "邮箱格式错误",

      "total": 0,

      "totalpage": 0

    }

     

    由此可见,参数的校验已经生效,因为email不符合@Email的校验规则,具体校验规则可以查看@Email的实现EmailValidator.java

     


    userName 的错误message 里面有{min} - {max} ?

    RequestBody

    {

      "age": 19,

      "birthDay": "2019-04-14T09:05:39.604Z",

      "email": "string",

      "id": "string",

      "sex": 0,

      "userName": ""

    }

    Response

    {

      "code": 1,

      "msg": "用户名长度要求在2-6之间",

      "total": 0,

      "totalpage": 0

    }

    Hibernate Validator 通过EL表达式获取到了在@length中定义的min以及max属性的值

    在上面的Controller中,需要在在接口参数中,增加一个BindingResult来接收校验的结果,每一个BindingResult与@Valid是一一对应的,如果有多个@Valid,那么需要对个BindResult来保存校验结果

    进阶使用,统一处理校验结果并返回前端

    在 ResponseEntityExceptionHandler (Line 162) 中,如果验证出现异常的时候是抛出了MethodArgumentNotValidException

    MethodArgumentNotValidException 描述:

     

    Exception to be thrown when validation on an argument annotated with {@code @Valid} fails.

     

    当使用@Valid注解的参数验证失败是抛出异常

    
     

    所以在BaseController中对MethodArgumentNotValidException进行处理

    Controller

    -- 对接口进行简化,通过异常捕获的方式对校验结果返回给前端

    @RequestMapping(value = "validation", method = RequestMethod.POST)

    public JsonResult validation(@Valid @RequestBody ValidationDemo demo) {

        return null;

    }

    BaseController

    
     

    if (e instanceof MethodArgumentNotValidException) {

        res.setCode(ApiConstants.JsonResult.FAIL);

        res.setMsg(JSONArray.toJSONString(((MethodArgumentNotValidException) e).getBindingResult().getAllErrors().stream().map(ObjectError::getDefaultMessage).collect(Collectors.toList())));

    }

    Response

    {

      "code": 1,

      "msg": "[\"年龄错误\",\"邮箱格式错误\"]",

      "total": 0,

      "totalpage": 0

    }

    
     

    分组校验

    在实际使用中,有可能我们针对一个属性,有多个校验规则,这时候就要使用到分组校验了

    改造实体

    public class ValidationDemo {

        private String id;

     

        @Length(min = 2, max = 6, message = "用户名长度要求在{min}-{max}之间")

        @NotNull(message = "用户名不可为空")

        private String userName;

     

        // 表示分组为Adult时使用该校验规则

        @Email(message = "邮箱格式错误")

        @NotBlank(message = "邮箱不可为空", groups = {ValidationDemo.Adult.class})

        private String email;

     

        @Past(message = "出生日期错误")

        private Date birthDay;

     

        @Min(value = 18, message = "年龄错误")

        @Max(value = 80, message = "年龄错误")

        private Integer age;

     

        @Range(min = 0, max = 1, message = "性别选择错误")

        private Integer sex;

     

        // 添加两个分组

        public interface Adult {

        }

     

        public interface Minor {

        }

    }

    测试一下

    // 这里将分组设置为Minor,目的是不校验邮箱字段

    @RequestMapping(value = "validation", method = RequestMethod.POST)

    public JsonResult validation(@Validated({ValidationDemo.Adult.class}) @RequestBody ValidationDemo demo) {

        return null;

    }

     

    RequestBody:

    {

      "age": 0,

      "birthDay": "2019-04-14T10:39:08.501Z",

      "email": "",

      "id": "string",

      "sex": 0,

      "userName": "string"

    }

    Response:

    {

      "code": 1,

      "msg": "[\"邮箱不可为空\"]",

      "total": 0,

      "totalpage": 0

    }

    如果是接口使用Minor分组呢?

    RequestBody:

    {

      "age": 0,

      "birthDay": "2019-04-14T10:39:08.501Z",

      "email": "",

      "id": "string",

      "sex": 0,

      "userName": "string"

    }

    Response:

    {

      "code": 0,

      "data": [

        {}

      ],

      "extra": "string",

      "msg": "string",

      "result": {},

      "total": 0,

      "totalpage": 0

    }

     

    并没有提示邮箱不可为空,由此可见,分组验证已经生效


     

    自定义校验规则

    例如新建一个自定义日期格式的校验

    @Documented

    @Retention(RetentionPolicy.RUNTIME)

    @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})

    @Constraint(validatedBy = {DateFormatByPatternValidator.class})

    public @interface DateFormatByPattern {

        String pattern() default "yyyy-MM-dd HH:mm";

     

        //默认错误消息

        String message() default "日期格式错误";

     

        //分组

        Class<?>[] groups() default {};

     

        //负载

        Class<? extends Payload>[] payload() default {};

    }

    同时新建一个对应的校验器

    public class DateFormatByPatternValidator implements ConstraintValidator<DateFormatByPattern, String> {

     

        private DateFormatByPattern dateFormatByPattern;

     

        @Override

        public void initialize(DateFormatByPattern constraintAnnotation) {

            dateFormatByPattern = constraintAnnotation;

        }

     

        @Override

        public boolean isValid(String value, ConstraintValidatorContext context) {

            //假如参数为空的话,返回true,如果要对参数值进行非空校验的话,通过@NotNull来校验,这样与日期格式校验解耦

            if (StringUtils.isNotBlank(value)) {

                String pattern = dateFormatByPattern.pattern();

                SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);

                try {

                    dateFormat.parse(value);

                } catch (ParseException e) {

                    return false;

                }

            }

            return true;

        }

    }

    改造实体

    //使用自定义规则校验前端参数

    @DateFormatByPattern(pattern = "yyyy-MM-dd")

    //因为同时用到了分组校验,所以在stringDate上添加@Valid,使校验生效

    @Valid

    private String stringDate;

    测试一下

    
     

    RequestBody:

    {

      "age": 0,

      "birthDay": "2019-04-15T08:23:21.683Z",

      "email": "",

      "id": "string",

      "sex": 0,

      "stringDate": "string",

      "userName": "string"

    }

    Response:

    {

      "code": 1,

      "msg": "[\"日期格式错误\",\"邮箱不可为空\",\"年龄错误\"]",

      "total": 0,

      "totalpage": 0

    }

    由此可见,自定义校验已生效

    展开全文
  • 之前在对一个数据集进行幂函数拟合时,总是有这样的错误出现...仔细研究后发现,在curve_fit拟合过程中,其中几步幂参数远远超过了预想的范围[0,1],从而导致计算溢出。虽然最后也能正常运行并拟合出了方程参数,但...

    之前在对一个数据集进行幂函数拟合时,总是有这样的错误出现:

    RuntimeWarning: overflow encountered in exp
    RuntimeWarning: overflow encountered in power

    仔细研究后发现,在curve_fit拟合过程中,其中几步幂参数远远超过了预想的范围[0,1],从而导致计算溢出。虽然最后也能正常运行并拟合出了方程参数,但放到其他程序中运行总是会报错。

    其实,只要设定好了幂的参数范围,自然不会出错。然而我在网上查了很多中文帖子,却没有找到在使用curve_fit时设置参数的范围的方法。这里参考了StackoverFlow中的一个帖子:https://stackoverflow.com/questions/16760788/python-curve-fit-library-that-allows-me-to-assign-bounds-to-parameters

    数据:x,y

    拟合方程:y=B*x^n

    import numpy as np
    from scipy import optimize
    
    #已知x,y两个np.array数组
    def func(x,B,n):
        return B*x**n
    
    param_bounds=([-np.inf,0],[np.inf,1])#设定B和n的下界和上界。其中B为负无穷到正无穷,n为0到1
    r2=optimize.curve_fit(func,x,y,bounds=param_bounds)
    B,n=r2[0]#输出拟合的参数

    注:Scipy的版本至少要0.17以上

    展开全文
  • NIST随机性测试及参数范围

    万次阅读 2018-03-17 18:23:28
    一 .... 频率检验(Frequency Test) 该检验主要是看0和1在整个序列中所占的比例。检验的目的是确定序列中的1和0数是否与真正的随机序列中的1和0数近似相同。检验评定1码占1/2,也就是说,在整个序列中0和1的数目是...

    一 . 16种NIST随机性测试方法

    软件下载地址点击打开链接

    1. 频率检验(Frequency  Test)

            该检验主要是看0和1在整个序列中所占的比例。检验的目的是确定序列中的1和0数是否与真正的随机序列中的1和0数近似相同。检验评定1码占1/2,也就是说,在整个序列中0和1的数目是一样的。其余别的检验手段都是在该检验成立的基础上进行的,若通过该测试,则被测序列是随机的。 

    测试数据:
    (input)e=11001001000011111101101010100010001000010110100011                    00001000110100110001001100011001100010100010111000
    (input) n = 100
    (processing) S100 = -16
    (processing) sobs = 1.6
    (output) P-value = 0.109599

    (conclusion) Since P-value ‡ 0.01, accept the sequence as random.

    2. 块内频数检验(Frequency Test  within a Block)

            此检验主要是看M位的子块中“1”码的比例。该检验的目的是判定M位的子块内“1”码的频率是否像随机假设下所预期的那样,近似于M/2。当M=1时,该检测相当于检测1位,即频数(一位)检验。

    测试数据:
    (input)e=11001001000011111101101010100010001000010110100011                    00001000110100110001001100011001100010100010111000
    (input) n = 100
    (input) M = 10
    (processing) N = 10
    (processing) c2 = 7.2
    (output) P-value = 0.706438

    (conclusion) Since P-value ‡ 0.0, accept the sequence as random.

    3. 游程检验(Runs Test)   

            此检验主要是看游程的总数,游程指的是一个没有间断的相同数序列,即游程或者是“1111„”或者是“0000„”。一个长度为k 的游程包含k 个相同的位。游程检测的目的是判定不同长度的“1”游程的数目以及“0”游程的数目是否跟理想的随机序列的期望值相一致。具体的讲,就是该检验手段判定在这样的“0”“1”子块之间的振荡是否太快或太慢。

    测试数据:
    (input)e=11001001000011111101101010100010001000010110100011                    00001000110100110001001100011001100010100010111000
    (input) n = 100
    (input) t = 0.02
    (processing) p = 0.42
    (processing) Vn(obs) =  52
    (output) P-value = 0.500798

    (conclusion) Since P-value ‡ 0.01, accept the sequence as random.

    4. 块内最长游程检验(Test for the Longest Run of Ones in a Block)  

            该检验主要是看长度为M-bits的子块中的最长“1”游程。这项检验的目的是判定待检验序列的最长“1”游程的长度是否同随机序列的相同。注意:最长“1”游程长度上的一个不规则变化意味着相应的“0”游程长度上也有一个不规则变化,因此,仅仅对“1”游程进行检验室足够的。

    测试数据:
    For the case where K = 3 and M = 8:
    (input)ε=11001100000101010110110001001100111000000000001001                00110101010001000100111101011010000000110101111100      
                   1100111001101101100010110010
    (input) n = 128
    (processing)     Subblock      Max-Run     Subblock      Max-Run 
                            11001100            (2)         00010101           (1) 
                            01101100            (2)         01001100           (2) 
                            11100000            (3)         00000010           (1) 
                            01001101            (2)         01010001           (1) 
                            00010011            (2)         11010110           (2) 
                            10000000            (1)         11010111           (3) 
                            11001100            (2)         11100110           (3) 
                            11011000            (2)         10110010           (2)
    (processing) n0 = 4;  n1 = 9;  n2 = 3;  n4 = 0;  c2 = 4.882457
    (output) P-value = 0.180609

    (conclusion) Since the P-value is ≥ 0.01, accept the sequence as random.

    5. 二元矩阵秩检验(Binary Matrix Rank Test)

            该检验主要是看整个序列的分离子矩阵的秩。目的是核对源序列中固定长度子链间的线性依赖关系。  

    测试数据:
    (input) e = the first 100,000 binary digits in the expansion of e
    (input) n = 100000, M = Q = 32 (NOTE:  672 BITS WERE DISCARDED.)
    (processing) N = 97
    (processing) FM = 23,  FM-1 = 60,  N – FM – FM-1= 14
    (processing) c2 = 1.2619656
    (output) P-value = 0.532069

    (conclusion) Since P-value ‡ 0.01, accept the sequence as random. 

    6.  离散傅里叶变换检验(Discrete Fourier Transform (Spectral) Test) 

            本检验主要是看对序列进行分步傅里叶变换后的峰值高度。目的是探测待检验信号的周期性,以此揭示其与相应的随机信号之间的偏差程度。做法是观察超过 95%阈值的峰值数目与低于 5%峰值的数目是否有显著不同。 

    测试数据:
    (input)e=11001001000011111101101010100010001000010110100011                    00001000110100110001001100011001100010100010111000
    (input) n = 100
    (processing) N1 = 46
    (processing) N0 = 47.5
    (processing) d = -0.973329
    (output) P-value = 0.330390

    (conclusion) Since P-value ‡ 0.01, accept the sequence as random.

    7. 非重叠模块匹配检验(Non-overlapping Template Matching Test)

            此检测主要是看提前设置好的目标数据串发生地次数。目的是探测那些产生太多给出的非周期模式的发生器。对于非重叠模块匹配检验以及后面会谈到的重叠模块匹配检验方法,我们都是使用一个 m-bit 的窗口来搜素一个特定的 m-bit 模式。如果这个模式没有被找到,则窗口向后移动一位。如果模式被发现,则窗口移动到一发现的模式的后一位,重复前面的步骤继续搜素下一个模式。

    测试数据:
    For a template B = 000000001 whose size is m = 9:
    (input) e = 220 bits produced by the G-SHA-1 generator1
    (input) n = 220, B = 000000001
    (processing) m = 255.984375 and s2= 247.499999
    (processing) W1 = 259; W2 = 229; W3 = 271; W4 = 245; W5 = 272; W6 = 262; W7 = 259; and W8 = 246
    (processing) c2(obs) = 5.999377
    (output) P-value = 0.647302

    (conclusion) Since the P-value ‡ 0.01, accept the sequence as random.

    8.  重叠模块匹配检验(Overlapping Template Matching Test) 

            该检验主要是看提前设定的目标模块发生地数目。检验步骤同非重叠模块匹配检验方法大致一样,不同点在于,发现目标模块后,窗口仅向后移动1位,而后继续搜索。

    测试数据:
    (input) e = the binary expansion of e up to 1,000,000 bits
    (input) n = 1000000, B = 111111111
    (processing) n0 = 329; n1 = 164;  n2 = 150; n3 = 111; n4 = 78; and n5 = 136
    (processing) c2(obs) = 8.965859
    (output) P-value = 0.110434

    (conclusion) Since the P-value ‡  0.01, accept the sequence as random.

    9.  Maurer 的通用统计检验(Maurer's“Universal Statistical”Test)

            检验主要是看匹配模块间的bit数。目的是检验序列能否在没有信息损耗的条件下被大大的压缩。一个能被大大压缩的序列被认为是一个非随机序列。

    测试数据:
    (input) e = A binary string constructed using G-SHA-14
    (input) n = 1048576, L = 7, Q = 1280
    (note) Note: 4 bits are discarded.
    (processing) c =0.591311, s = 0.002703, K = 148516, sum = 919924.038020
    (processing) fn  = 6.194107, expectedValue = 6.196251, s = 3.125
    (output) P-value = 0.427733

    (conclusion) Since P-value ‡ 0.01, accept the sequence as random.

    10. Lempel-Ziv压缩检验 (Lempel-Ziv Compression Test)

            本检测主要是看整个序列中不同模式积累的数目(单词数目)。检验目的是判定待测序列能够被压缩到什么程度。若序列不能被明显的压缩,则该序列就是非随机的。一个随机序列有特征数个不同模式。

    测试数据:
    (input) e = the first 1,000,000 digits in the binary expansion of e
    (input) n = 1,000,000
    (processing) Wobs = 69559
    (output) P-value = 0.000584

    (conclusion) Since P-value < 0.01, reject the sequence as being random. 

    11. 线性复杂度检验(Linear Complexity Test)  

            本检验手段主要是看线性反馈移位寄存器的长度。检验的目的是判定序列的复杂程度是否达到可视为是随 机序列的程度。随机序列的特点是有较长的线性反馈移位寄存器。一个线性反馈移位寄存器太小的话意味着序列非随机。  

    测试数据:
    (input) e = “the first 1,000,000 binary digits in the expansion of e”
    (input) n = 1000000 = 106, M = 1000
    (processing) v0 = 11; v1 = 31; v2 = 116; v3 = 501; v4 = 258; v5 = 57; v6 = 26
    (processing) c2(obs) = 2.700348
    (output) P-value = 0.845406

    (conclusion) Since the P-value ‡ 0.01, accept the sequence as random.

    12. 序列检验(Serial Test)

            本检验主要是看整个序列中所有可能的重叠m-bit模式的频率,目的是判定2m个m-bit重叠模式的数目是否跟随机情况下预期的值相近似。随机序列具有均匀性也就是说对于每个m-bit模式其出现的概率应该是一样的。当m=1时等价于频数检验。

    测试数据:
    (input) e = 1,000,000 bits from the binary expansion of e
    (input) m = 2;  n = 1000000 = 106
    (processing) #0s = 499971; #1s = 500029
                        #00s = 250116; #01s = #10s = 249855; #11s = 250174
    (processing) y22 = 0.343128; y21 = 0.003364; y20 = 0.000000
    (processing) y22 = 0.339764;  2y22 = 0.336400
    (output) P-value1 = 0.843764; P-value2 = 0.561915

    (conclusion) Since both P-value1 and P-value2 were ‡ 0.01, accept the sequences as random for both tests.   

    13. 近似熵检验(Approximate Entropy Test)  

            同序列检验一样,近似熵检验主要看的也是整个序列中所有可能的重叠 m-bit 模式的频率。目的是将两相邻长度(m和m+1)的重叠子块的频数与随机情况下预期的频数相比较。

    测试数据:  
    (input)e=11001001000011111101101010100010001000010110100011                    00001000110100110001001100011001100010100010111000
    (input) m = 2; n = 100
    (processing) ApEn(m) = 0.665393
    (processing) c2(obs) = 5.550792
    (output) P-value = 0.235301

    (conclusion) Since P-value ‡ 0.01, accept the sequence as random. 

    14. 累加和检验(Cumulative Sums (Cusum) Test)

            该检验主要是看随机游动的最大偏移。随机游动被定义为序列中调整后的-1,+1的累加和。检验的目的是判定序列的累加和相对于预期的累加和过大还是过小。这个累加和可被看做随机游动。对于随机序列,随机游动的偏离应该在0附近。而对于非随机序列,这个随机游动偏离将会比0大很多。

    测试数据:
    (input)e=11001001000011111101101010100010001000010110100011                      00001000110100110001001100011001100010100010111000
    (input) n = 100
    (input) mode = 0 (forward) ||  mode = 1 (reverse)
    (processing) z = 1.6 (forward) || z = 1.9 (reverse)
    (output) P-value = 0.219194 (forward) || P-value = 0.114866 (reverse)

    (conclusion) Since P-value > 0.01, accept the sequence as random.

    15. 随机游动检验(Random Excursions Test) 

            本检验主要是看一个累加和随机游动中具有 K 个节点的循环的个数。累加和随机游动由于将关于“0”,“1”的部分和序列转化成适当的“-1”、“+1”序列产生的。一个随机游动循环由单位步长的一个序列组成,这个序列的起点和终点均是 0。该检验的目的是确定在一个循环内的特殊状态对应的节点数是否与在随机序列中预计达到的节点数相背离。实际上,这个检验由八个检验(和结论)组成,一个检验和结论对应着一个特定的状态:-4,-3,-2,-1和+1,+2,+3,+4 。

    测试数据:
    (input) e = "the binary expansion of e up to 1,000,000 bits"
    (input) n = 1000000 = 106
    (processing) J = 1490
                      State=x               c2           P-value           Conclusion 
                          -4              3.835698     0.573306           Random 
                          -3              7.318707     0.197996           Random 
                          -2              7.861927     0.164011           Random 
                          -1              15.692617   0.007779         Non-random 
                         +1              2.485906     0.778616           Random 
                         +2              5.429381     0.365752           Random 
                         +3              2.404171     0.790853           Random                      
                         +4              2.393928     0.792378           Random

    (conclusion) For seven of the states of x, the P-value is ≥ 0.01, and the conclusion would be that the sequence was random. However, for one state of x (x = -1), the P-value is < 0.01, so the conclusion would be that the sequence is non-random. When contradictions arise, further sequences should be examined to determine whether or not this behavior is typical of the generator.  

    16. 随机游动状态频数检验(Random Excursions Variant Test) 

            该检验主要是看累计和随机游动中经历的特殊状态的总数。检验目的是判定随机游动中实际经历多个状态的值与预期值之间的偏离程度。该检验实际上是十八个检验(和结论),每个状态对应着一个检验和一个结论。这些状态分别是:-9,-8,-7,-6,-5,-4,-3,-2,-1和+1,+2,+3,+4,+5,+6,+7,+8。

    测试数据:
    (input) e = "the binary expansion of e up to 1,000,000 bits"
    (input) n = 1000000 = 106
    (processing) J = 1490


    (conclusion) Since the P-value ‡ 0.01 for each of the eighteen states of x, accept the sequence as random.

    二 . NIST随机性测试参数范围


















    展开全文
  • 在java开发中,经常见到许多通过注解@Annotation实现功能的优秀代码,尤其在接触spring之后,对注解更是一发不可收拾,这里将向读者介绍一种范围定界方法。需要说明的是,这种定界方法不能独立于世,而必须结合...
  • 可选参数范围的处理

    千次阅读 2011-03-28 21:18:00
      查询 一个输入范围 内的 数据: Select * from table1 Where fld1>=A and fld  其中A,B均为可选输入项目,有如下几种组合:   1:A有值,B无值,即 Select * from table1 Where ...
  • 参数取值范围校验

    千次阅读 2018-07-02 01:16:03
    1.将要校验的字段以(字段名=类型:取值范围)写入配置文件2.通过相对路径获取配置文件中的数据3.从传参中获取所有待校验的字段,并根据校验规则进行校验扩展:Java 读取 .properties 配置文件的几种方式(1).读取相对路径...
  • 报的错误是参数13 INSERT_TIME ,我这个参数13 是一个日期,数据库是 TIMESTAMP 类型的,然后取值用函数 F_GET_MAX_KEY ``` CREATE OR REPLACE FUNCTION "F_GET_MAX_KEY" ("IC_NAME" VARCHAR(255) ) ...
  • 在上一个笔记中,你已经看到了在超参数范围中,随机取值可以提升你的搜索效率。 但随机取值并不是在有效范围内的随机均匀取值,而是选择合适的标尺,用于探究这些超参数,这很重要。在这个笔记中,会教你怎么做。 ...
  • 调试处理 对于超参数,如何才能找到一个比较好的设定呢?...如图所示,我们通常情况下会采用图中右侧所示的情况来选择超参数,比如说二维情况下,我们确定选择范围之后随机选点,然后看看这个超参数效果...
  • db2 参数1无效: 参数索引超出范围

    千次阅读 2018-12-04 14:50:22
    mysql 动态sql 唯一条件可为 1=1   db2 当动态条件全不传时,会报此错误 , 1=1 替换为 #{__BEGIN_REC} = #{__BEGIN_REC}
  • java泛型通配符和类型参数范围

    千次阅读 2018-06-14 13:49:26
    本节先讲解如何限制类型参数范围,再讲解通配符(?)。类型参数范围在泛型中,如果不对类型参数加以限制,它就可以接受任意的数据类型,只要它是被定义过的。但是,很多时候我们只需要一部分数据类型就够了,用户...
  • 【转】Informatica PowerCenter Parameter file 中的参数影响范围参数文件举例 Heading Scope [Global] All Integration Services, Integration Service processes, workflows, worklets, and ...
  • 控制地图显示范围参数陈玉进 李泉 南京跬步科技有限公司(http://www.creable.cn) 控制地图显示范围有几个重要的参数:1,Zoom,当前视窗显示的地图范围的宽度;2,Center,当前视窗显示的地图范围的中心点;3,...
  • 如题,pygame中rect下的参数有没有数值大小限制?见下例 例:我在一个循环中使用了如下代码片: ``` def update(self): """更新小球位置""" self.y += self.speed_y print("Y position", self.y) ...
  • 11g推出了interval间隔分区,以往的分区是需要手工或半自动化脚本实现分区扩展,但这种间隔分区的出现,将分区扩展的工作彻底解放出来,这里不讨论何为间隔分区,主要说一下创建间隔分区有一个STORE IN参数,官方...
  • 现在的情况是发送短短信没问题,但是**发送长短信网关就返回5**,说是(参数格式错,指命令中参数值与参数类型不符或与协议规定的范围不符),但是无论我怎么修改参数配置都没用,现在脸上的表情就是目前微信朋友刷...
  • 指定的参数已超出有效值的范围参数名: site) 好多同学都这样子,什么都没干就错误了。 解决方案: 1.打开 设置 -&amp;gt; 点击应用 2.选程序和功能 3.点启动或关闭Windows功能 4.找到两个...
  • asp.net初学者 出错代码旁边注释掉的是之前的写法。。不会改啊要抓狂了!!!!麻烦各界大神指正!还挺着急的。...悬赏我可以加,回答的时候贴上改正后的代码好不?... ...
  • 这个问题是我再打开自己的项目的时候发现的,我们看一下他的报错 这个 问题刚开始的时候我以为是项目的问题,回来我打开了我的所有项目都是报同一个错,这时候我就知道不是项目的问题了,回来我找到老师之后,在...
  • 指定的参数已超出有效值的范围参数名:site

    千次阅读 热门讨论 2018-02-10 14:54:10
    初学牛腩对于ASP知之甚少,第一次调试项目出现下述问题: 查了一下出现这样的问题可能是IIS没有启动,启动步骤如下(win10): 1.打开“控制面板”→“程序”→“启用或关闭Windows功能”,参考图: 2....
  • 错误:指定的参数已超出有效值的范围参数名: value 现象:DropDownList绑定有问题.解决方案: 1。交互的几个数据表的字段长度或类型不一致! 2。数据结构定义不一致!比如在DataSet列中添加的列类型和你赋值的...
  • 调试项目出现下述问题: 查了一下出现这样的问题可能是IIS没有启动,启动步骤如下(win10): 1.打开“控制面板”→“程序”→“启用或关闭Windows功能”,参考图: 2.选择“Internet Information Services”,...
  • 一、根据日期范围查询 如果数据库里的日期字段属性是date或者是datetime那么maper.xml中应该这样写: 其中<![CDATA[ ]]>:这是XML语法。在CDATA内部的所有内容都会被解析器忽略。如果文本包含了很多的"<...
  • jeecms标签对应的类,方便查找标签的输入输出参数,以及参数对应的数值类型、范围
  • 错误提示:指定的参数已超出有效值的范围参数名: utcDate说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System....
  • 解决方法:
  • 业务系统开发过程中经常会面对数据范围权限的问题,比如:部分敏感字段只有领导能开、某些业务只能看自己经手的或者只能看自己所在部门的等等。归纳起来和关系数据库相关的数据范围权限可以分为两类: 字段权限,...
  • MYSQL INNODB参数

    千次阅读 2015-01-27 11:38:27
    innodb_adaptive_flushing 命令行格式 --innodb_adaptive_flushing=# 系统变量 参数名称 ...参数范围 Global 动态变量 Yes 允许值 类型

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,408
精华内容 13,763
关键字:

参数范围