跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 前端小白突然想到个问题,想请教一下各位 dalao, JavaScript 中的 Math.random()是如何实现随机数的?用了这么久,好像只知其然,而不知其所以然
未分類
27 9 月 2020

前端小白突然想到个问题,想请教一下各位 dalao, JavaScript 中的 Math.random()是如何实现随机数的?用了这么久,好像只知其然,而不知其所以然

前端小白突然想到个问题,想请教一下各位 dalao, JavaScript 中的 Math.random()是如何实现随机数的?用了这么久,好像只知其然,而不知其所以然

資深大佬 : damao2250 4

每个浏览器的实现不一样,比如 Chrome V8 的实现:
// ECMA 262 – 15.8.2.14
var rngstate; // Initialized to a Uint32Array during genesis.
function MathRandom() {
var r0 = (MathImul(18030, rngstate[0] & 0xFFFF) + (rngstate[0] >>> 16)) | 0;
rngstate[0] = r0;
var r1 = (MathImul(36969, rngstate[1] & 0xFFFF) + (rngstate[1] >>> 16)) | 0;
rngstate[1] = r1;
var x = ((r0 << 16) + (r1 & 0xFFFF)) | 0;
// Division by 0x100000000 through multiplication by reciprocal.
return (x < 0 ? (x + 0x100000000) : x) * 2.3283064365386962890625e-10;
}

https://github.com/v8/v8/blob/dae6dfe08ba9810abbe7eee81f7c58e999ae8525/src/math.js#L144

大佬有話說 (3)

  • 資深大佬 : Xusually

    不安全的,基本都属于伪随机数

  • 資深大佬 : godblessumilk

    真随机数的技术已经很成熟了,现代系统大多都提供了真随机数生成器,特别是操作系统。

    举个例子,Linux 操作系统上有 /dev/random 和 /dev/urandom 两个随机数生成器,感兴趣可以去查一下相关文献,简单来讲就是会检测计算机运行过程中的一些“噪声”,比如时间、IO 响应时间、外设信号变化、键盘敲击时机、鼠标位置变化,甚至是磁场波动,不同系统(发行版)、硬件环境能提供的“噪声”来源不同。

    JS 的 Math.random()没有规定底层实现细节,由各个 JS 引擎自己决定如何实现,最省事的方式就是直接调用系统的随机数生成器。

  • 資深大佬 : libook

    @Xusually
    @godblessumilk
    @libook
    感谢各位大佬的解答,小弟受教了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具