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*)( (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读