将任意种子转换为 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" 会产生相同的值,例如。