nodejs javascript 实现随机数种子的几种方法
来源:互联网 发布:苏州天魂网络面试题 编辑:程序博客网 时间:2024/05/06 07:01
最简单的方法
http://stackoverflow.com/questions/521295/javascript-random-seeds
- 用 Math.sin
var seed = 1;function random() { var x = Math.sin(seed++) * 10000; return x - Math.floor(x);}
简单封装下
Math.seed = function(s) { return function() { s = Math.sin(s) * 10000; return s - Math.floor(s); };};// usage:var random1 = Math.seed(42);var random2 = Math.seed(random1());Math.random = Math.seed(random2());
2.这个稍复杂.不过随机性比sin更好.
var m_w = 123456789;var m_z = 987654321;var mask = 0xffffffff;// Takes any integerfunction seed(i) { m_w = i;}// Returns number between 0 (inclusive) and 1.0 (exclusive),// just like Math.random().function random(){ m_z = (36969 * (m_z & 65535) + (m_z >> 16)) & mask; m_w = (18000 * (m_w & 65535) + (m_w >> 16)) & mask; var result = ((m_z << 16) + m_w) & mask; result /= 4294967296; return result + 0.5;}
封装下
Math.seed = function(s) { var m_w = s; var m_z = 987654321; var mask = 0xffffffff; return function() { m_z = (36969 * (m_z & 65535) + (m_z >> 16)) & mask; m_w = (18000 * (m_w & 65535) + (m_w >> 16)) & mask; var result = ((m_z << 16) + m_w) & mask; result /= 4294967296; return result + 0.5; }}//usagevar myRandomFunction = Math.seed(1234);var randomNumber = myRandomFunction();
正统的实现
https://github.com/davidbau/seedrandom
https://github.com/davidbau/seedrandom/blob/released/seedrandom.js
Script tag usage
<script src="//cdnjs.cloudflare.com/ajax/libs/seedrandom/2.4.0/seedrandom.min.js">
</script>
// Sets Math.random to a PRNG initialized using the given explicit seed.Math.seedrandom('hello.');console.log(Math.random()); // Always 0.9282578795792454console.log(Math.random()); // Always 0.3752569768646784// Sets Math.random to an ARC4-based PRNG that is autoseeded using the// current time, dom state, and other accumulated local entropy.// The generated seed string is returned.Math.seedrandom();console.log(Math.random()); // Reasonably unpredictable.// Seeds using the given explicit seed mixed with accumulated entropy.Math.seedrandom('added entropy.', { entropy: true });console.log(Math.random()); // As unpredictable as added entropy.// Use "new" to create a local prng without altering Math.random.var myrng = new Math.seedrandom('hello.');console.log(myrng()); // Always 0.9282578795792454// Use "quick" to get only 32 bits of randomness in a float.console.log(myrng.quick()); // Always 0.3752569768112153// Use "int32" to get a 32 bit (signed) integerconsole.log(myrng.int32()); // Always 986220731
Node.js usage
npm install seedrandom
// Local PRNG: does not affect Math.random.var seedrandom = require('seedrandom');var rng = seedrandom('hello.');console.log(rng()); // Always 0.9282578795792454// Global PRNG: set Math.random.seedrandom('hello.', { global: true });console.log(Math.random()); // Always 0.9282578795792454// Autoseeded ARC4-based PRNG.rng = seedrandom();console.log(rng()); // Reasonably unpredictable.// Mixing accumulated entropy.rng = seedrandom('added entropy.', { entropy: true });console.log(rng()); // As unpredictable as added entropy.// Using alternate algorithms, as listed above.var rng2 = seedrandom.xor4096('hello.')console.log(rng2());
0 0
- nodejs javascript 实现随机数种子的几种方法
- 随机数种子的作用
- JavaScript继承实现的几种方法
- java获取随机数的几种方法
- js产生随机数的几种方法
- js产生随机数的几种方法
- OC产生随机数的几种方法
- Python 随机数生成的几种方法
- java获取随机数的几种方法
- Java获取随机数的几种方法
- 生成PHP随机数的几种方法
- Java获得随机数的几种方法
- PHP生成随机数的几种方法
- 几种生成随机数的方法
- JavaScript访问后台方法的几种实现方法
- 【Android】几种子线程更新UI主线程的方法
- JavaScript实现网页弹出式窗口的几种方法
- 利用javascript实现页面跳转的几种方法
- sublime text3的CSS格式化----HTML-CSS-JS Prettify
- 关于Spring的问题之Failed to read schema document
- CM13 安卓6.0.1编译教程(以小米4C为例)
- CCNU ACM 2016夏季集训·day3比赛
- Git16--多人协作
- nodejs javascript 实现随机数种子的几种方法
- Cocos2d-x 基础概念——导演、场景、层、精灵
- 从两元线性回归到多元:数据预处理的重要性
- opencv——最大阈值分割
- bzoj 2303 Apio2011 方格染色
- 2199: [Usaco2011 Jan]奶牛议会
- POJ 1274 The Perfect Stall
- LZW编码
- 332. Reconstruct Itinerary 这道我还真没怎么掌握