”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 计算机中的随机数真的随机吗?JS版本

计算机中的随机数真的随机吗?JS版本

发布于2025-04-13
浏览:890

了解JavaScript的模拟随机性:深入研究Math.random()

在编程中看似毫不费力的随机数通常会掩盖潜在的复杂性,尤其是考虑到计算机的固有确定性。本文探讨了JavaScript如何使用

模拟随机性,揭示了生成我们认为我们认为是随机数的机制。计算中随机性的幻觉

计算机以其核心执行指令。 那么,它们如何产生看起来随机的数字?

[2 Is random numbers in computers are random at all? JS version

Math.random()

提供的“随机性”不是真正的随机。这是伪随机。 伪随机数生成器(PRNGS)采用数学算法来创建表现出类似随机行为的数字序列。

种子值:Is random numbers in computers are random at all? JS version启动值(种子)启动数字序列。 种子决定了整个序列。

确定行为:

知道算法和种子允许预测整个数字序列。

周期性:

通常会使用Xorshift或Mersenne Twister等算法(精确的算法取决于JavaScript引擎,例如Chrome中的V8)。 [2 [2

是JavaScript的主要随机数生成器。 它的作用如下:

    它在0(包含)和1(独家)之间产生一个浮点数。 示例包括0.2315601941492、0.6874206142281,或0.9912760919023。 [2 console.log(math.random()); // 0到9之间的随机整数 console.log(Math.Floor(Math.random() * 10)); // 1到100之间的随机数 console.log(Math.floor(Math.random() * 100)1);
  1. [2 过程涉及以下步骤:
  2. 使用初始种子值。 该种子通常源自系统时钟或另一个唯一来源。 该算法将数学转换应用于种子以创建一个新的数字。
  3. 这个新数字除以一个较大的常数(用于0到1之间的归一化。
  4. 此过程重复对 Math.random()的每个呼叫,在序列中生成下一个数字。

此可预测的序列(给定种子)使其适用于模拟和游戏,但不适合加密应用程序。 为什么真正的随机性仍然难以捉摸

MATH.RANDOM()

的确定性算法意味着如果已知种子和算法,则可以重现其序列。 对于对加密的安全敏感任务,加密保护的随机数是必不可少的,使用Web Crypto API生成:Is random numbers in computers are random at all? JS version [2 const array = new Uint32array(5); window.crypto.getrandomvalues(array); console.log(array);

确定系统中随机性的挑战 [2

计算机的二进制自然(0s和1s)与随机性的固有不确定性发生冲突。 有效地模拟随机性:

外部资源:

系统通常使用不可预测的外部数据(鼠标运动,键盘,系统时钟)进行种子值。

熵池:

结论:必要的幻觉
// Random number between 0 and 1
console.log(Math.random());

// Random integer between 0 and 9
console.log(Math.floor(Math.random() * 10));

// Random number between 1 and 100
console.log(Math.floor(Math.random() * 100)   1);
对于许多应用程序都是实用的,但必须确认其局限性和确定性。 对于安全性和真实随机性,需要加密方法。

让我们感谢确定论与驱动我们代码的模拟随机性之间的有趣相互作用! [2

最新教程 更多>
  • 在GO中构造SQL查询时,如何安全地加入文本和值?
    在GO中构造SQL查询时,如何安全地加入文本和值?
    在go中构造文本sql查询时,在go sql queries 中,在使用conting and contement和contement consem per时,尤其是在使用integer per当per当per时,per per per当per. [&​​&&&&&&&&&&&&&&&默元组方法在...
    编程 发布于2025-05-10
  • Go语言如何动态发现导出包类型?
    Go语言如何动态发现导出包类型?
    与反射软件包中的有限类型的发现能力相反,本文探索了替代方法,探索了在Runruntime。go import( “ FMT” “去/进口商” ) func main(){ pkg,err:= incorter.default()。导入(“ time”) 如果err...
    编程 发布于2025-05-10
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError: SomeClass...
    编程 发布于2025-05-10
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-05-10
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-05-10
  • 如何使用Python有效地以相反顺序读取大型文件?
    如何使用Python有效地以相反顺序读取大型文件?
    在python 中,如果您使用一个大文件,并且需要从最后一行读取其内容,则在第一行到第一行,Python的内置功能可能不合适。这是解决此任务的有效解决方案:反向行读取器生成器 == ord('\ n'): 缓冲区=缓冲区[:-1] ...
    编程 发布于2025-05-10
  • PHP未来:适应与创新
    PHP未来:适应与创新
    PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。 引言在编程世界中,PHP一直是网页开发的中流砥柱。作为一个从1994年就开始发展...
    编程 发布于2025-05-10
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-05-10
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义函数。 runkit_function_renction_re...
    编程 发布于2025-05-10
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-05-10
  • Go语言垃圾回收如何处理切片内存?
    Go语言垃圾回收如何处理切片内存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片时,了解垃圾收集行为至关重要,以避免潜在的内存泄...
    编程 发布于2025-05-10
  • 如何使用“ JSON”软件包解析JSON阵列?
    如何使用“ JSON”软件包解析JSON阵列?
    parsing JSON与JSON软件包 QUALDALS:考虑以下go代码:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    编程 发布于2025-05-10
  • 查找当前执行JavaScript的脚本元素方法
    查找当前执行JavaScript的脚本元素方法
    如何引用当前执行脚本的脚本元素在某些方案中理解问题在某些方案中,开发人员可能需要将其他脚本动态加载其他脚本。但是,如果Head Element尚未完全渲染,则使用document.getElementsbytagname('head')[0] .appendChild(v)的常规方...
    编程 发布于2025-05-10
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-05-10
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-05-10

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3