加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scalacheck数字生成器在0 <= x <2 ^ 64之间

发布时间:2020-12-16 18:08:42 所属栏目:安全 来源:网络整理
导读:我正试图找一个覆盖在C中的uint64_t的好数字生成器.这是我到目前为止所拥有的. def uInt64s : Gen[BigInt] = Gen.choose(0,64).map(pow2(_) - 1) 这是一个良好的开端,但它只生成数字2 ^ n – 1.是否有更有效的方法来生成随机BigInts,同时保留数字范围0 = n 2
我正试图找一个覆盖在C中的uint64_t的好数字生成器.这是我到目前为止所拥有的.

def uInt64s : Gen[BigInt] = Gen.choose(0,64).map(pow2(_) - 1)

这是一个良好的开端,但它只生成数字2 ^ n – 1.是否有更有效的方法来生成随机BigInts,同时保留数字范围0< = n< 2 ^ 64?

解决方法

好吧,也许我在这里遗漏了一些东西,但这不是很简单吗?

def uInt64s : Gen[BigInt] = Gen.chooseNum(Long.MinValue,Long.MaxValue)
                               .map(x => BigInt(x) + BigInt(2).pow(63))

Longs已经拥有正确的位数 – 只需添加2 ^ 63,因此Long.MinValue变为0,Long.MaxValue变为2 ^ 64 – 1.当然还要使用BigInts进行添加.

我很好奇生成值的分布.显然,chooseNum的分布并不统一,因为它更喜欢特殊值,但Longs的边缘情况可能对UInt64s也很有意义:

/** Generates numbers within the given inclusive range,with
  *  extra weight on zero,+/- unity,both extremities,and any special
  *  numbers provided. The special numbers must lie within the given range,*  otherwise they won't be included. */
def chooseNum[T](minT: T,maxT: T,specials: T*)(

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读