9

编程小知识之 Random接口返回值

 4 years ago
source link: https://blog.csdn.net/tkokof1/article/details/84328704
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

编程小知识之 Random接口返回值

tkokof1 2018-11-21 19:39:54 297

本文简述了 Random 接口返回值的一些相关信息

平日工作中,(伪)随机数的使用一定是避不开的,拿 C# 为例,System 命名空间下的 Random 类型一般都是我们生成(伪)随机数的第一选择:

var rand = new System.Random();
var val = rand.NextDouble();

Unity 中也在 UnityEngine 命名空间下提供了自己的 Random 类型,不过接口方法上都是静态类型:

var val = UnityEngine.Random.value;

上述的接口方法使用上似乎都很简单,但是深入一下接口细节,可能就不是所有同学都了解了,甚至还会产生混淆:

System.Random 的 NextDouble 方法返回的(伪)随机数的范围是多少? 那么 UnityEngine.Random.value 呢?

很多同学可能都知道答案: 0.0 ~ 1.0

那么接着问:

这些返回值包含 0.0 和 1.0 这两个端点吗?

到这里可能有些同学就会有些混淆了,答案是这样的:

System.Random 的 NextDouble 的返回值范围 >= 0.0 并且 < 1.0, 即 [0.0, 1.0)

UnityEngine.Random.value 的返回值范围 >= 0.0 并且 <= 1.0, 即 [0.0, 1.0]

两者的返回值范围不同导致了混淆的产生,使用时不加注意的话自然也会导致错误.

这里将相关常用的 Random 方法以表格列出,方便记忆和查阅:

类型方法返回值System.RandomNext()[0, int.MaxValue)System.RandomNext(int max)[0, max)System.RandomNext(int min, int max)[min, max)System.RandomNextDouble()[0.0, 1.0)UnityEngine.RandomRange(int min, int max)[min, max)UnityEngine.RandomRange(float min, float max)[min, max]UnityEngine.Randomvalue[0.0f, 1.0f]

注意到下面一点可能有助于我们的记忆:

Random 接口方法的返回值范围一般都是左闭右开的,仅 UnityEngine.RandomRange(float min, float max)value 两个方法的返回值范围是全闭区间.


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK