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

前端之家收集整理的这篇文章主要介绍了Scalacheck数字生成器在0 <= x <2 ^ 64之间前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正试图找一个覆盖在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*)(

猜你在找的Scala相关文章