将任意种子转换为 0 到 1 之间的浮点数
Converting an arbitrary seed into a float between 0 and 1
我希望能够将任何包含任何 utf-8 的字符串更改为 0 到 1 之间的随机数。
我可以使用以下方法转换任何数字种子:
Math.abs(Math.sin(seed));
由此我可以生成一个伪种子 Math.random()
-like 数字。
所以它正在将字符串转换为数字。我研究了使用加密,发现对字符串进行摘要是可行的,但速度非常慢,而且有点矫枉过正。
关于如何实现这个的任何想法?
使用 String.prototype.charCodeAt() 您可以生成一个整数表示:
function stringToSeed(str){
var values = [];
for (var i = 0, len = str.length; i < len; i++) {
values.push(str.charCodeAt(i));
}
// concatenatte and coerce to integer
return values.join('') + 0;
}
var seed = stringToSeed(string);
然后你可以像以前一样把这颗种子传给罪恶。
连接而不是简单地添加值背后的想法是确保将顺序考虑到随机性,否则 "AB" 和 "BA" 会产生相同的值,例如。
我希望能够将任何包含任何 utf-8 的字符串更改为 0 到 1 之间的随机数。
我可以使用以下方法转换任何数字种子:
Math.abs(Math.sin(seed));
由此我可以生成一个伪种子 Math.random()
-like 数字。
所以它正在将字符串转换为数字。我研究了使用加密,发现对字符串进行摘要是可行的,但速度非常慢,而且有点矫枉过正。
关于如何实现这个的任何想法?
使用 String.prototype.charCodeAt() 您可以生成一个整数表示:
function stringToSeed(str){
var values = [];
for (var i = 0, len = str.length; i < len; i++) {
values.push(str.charCodeAt(i));
}
// concatenatte and coerce to integer
return values.join('') + 0;
}
var seed = stringToSeed(string);
然后你可以像以前一样把这颗种子传给罪恶。
连接而不是简单地添加值背后的想法是确保将顺序考虑到随机性,否则 "AB" 和 "BA" 会产生相同的值,例如。