Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使该PRNG生成范围内的数字?_Javascript_Math_Random_Cryptography - Fatal编程技术网

Javascript 如何使该PRNG生成范围内的数字?

Javascript 如何使该PRNG生成范围内的数字?,javascript,math,random,cryptography,Javascript,Math,Random,Cryptography,我在下面找到了我在JavaScript中制作的8位和16位数字: const fetch=(x,o)=>{ 如果(x>=o){ 返回x }否则{ 常数v=(x*x)%o 返回(x取回(x,65519) 常量fetch8=(x)=>fetch(x251) //最后一个数字可以是任何数字。 constbuild16=(x,o)=>fetch16((fetch16(x)+o)^42703) 常量build8=(x,o)=>fetch8((fetch8(x)+o)^101) 设i=0 让无效=[] 而

我在下面找到了我在JavaScript中制作的8位和16位数字:

const fetch=(x,o)=>{
如果(x>=o){
返回x
}否则{
常数v=(x*x)%o
返回(x取回(x,65519)
常量fetch8=(x)=>fetch(x251)
//最后一个数字可以是任何数字。
constbuild16=(x,o)=>fetch16((fetch16(x)+o)^42703)
常量build8=(x,o)=>fetch8((fetch8(x)+o)^101)
设i=0
让无效=[]
而(i<255){
设j=0
而(j<255){
设x=8(i,j)
如果(x>255){
无效。推送([i,j,x])
}
j++
}
我++
}

console.log(JSON.stringify(invalid))
获取超出范围值的原因是,尽管
fetchXX
将生成范围内的值,但
+o
会破坏此属性。XOR操作有时可能会将其恢复到范围内,但并不总是如此

因此,您应该在
+o
之后取值的模。异或操作永远不会使其超出范围,因此可以保持原样

其次,为了测试是否没有生成重复的参数,您需要修复传递给
buildXX
函数的两个参数中的一个,而只改变另一个参数。在我看来,冻结第二个参数更符合逻辑

这就是它的样子:

const fetch=(x,o)=>{
如果(x>=o){
返回x
}否则{
常数v=(x*x)%o
返回(x取回(x,65519)
常量fetch8=(x)=>fetch(x251)
//最后一个数字可以是任何数字。
常量build16=(x,o)=>fetch16((fetch16(x)+o)%65536^42703)
常量build8=(x,o)=>fetch8((fetch8(x)+o)%256^101)
const j=115;//如果您不想要重复的,i或j应该保持不变
设i=0
设无效=[];
设valid=newset;

虽然(我发现,
buildXX
接受两个参数,并且您对它们都进行了更改,从而提供了更多的组合可能性,if可以生成结果,这让我感到困惑。为什么这里有两个维度而不是一个维度?