C# Random.NextDouble方法能否返回';1.0';?
在C# Random.NextDouble方法能否返回';1.0';?,c#,random,numbers,C#,Random,Numbers,在Random.NextDouble中写着 返回一个介于0.0和1.0之间的随机数。 我想问,在任何情况下,它是否可能返回1?否-根据文档,零包括在内,但1不包括: 大于或等于0.0且小于1.0的双精度浮点数 我不确定我是否理解这些投票。您是否阅读了该链接中文档的下一句话?我不禁想知道它是否可以返回介于1E-323和1E-17之间的值。有人可能会认为它以某种方式生成了一个带有固定“刻度”的随机“尾数”。另一件事:严格小于1.0的数字可能会以通常的字符串表示形式显示为1。例如double d=0.
Random.NextDouble
中写着
返回一个介于0.0和1.0之间的随机数。
我想问,在任何情况下,它是否可能返回
1
?否-根据文档,零包括在内,但1不包括:
大于或等于0.0且小于1.0的双精度浮点数
我不确定我是否理解这些投票。您是否阅读了该链接中文档的下一句话?我不禁想知道它是否可以返回介于
1E-323
和1E-17
之间的值。有人可能会认为它以某种方式生成了一个带有固定“刻度”的随机“尾数”。另一件事:严格小于1.0
的数字可能会以通常的字符串表示形式显示为1
。例如double d=0.99999999978;控制台写入线(d<1.0);/*“True”*/Console.WriteLine(d);/*“1”*/
@JeppeStigNielsen这在理论上可能发生,但在当前的Random.NextDouble
实现中不会发生,因为它只使用大约31或32位,而不是完整的53位。也不使用子窗体。这很简单,就像是randomInt(0..2^31-1)/2^31
@CodesInChaos有趣。我在想这样的事情。我做了一些实验,它看起来像是myRandom.NextDouble()*(Math.Pow(2.0,31.0)-1.0)
总是给出一个整数。然而,从BitConverter.GetBytes(myRandom.NextDouble())
中检测是不容易的,因为该因子似乎不是2的幂,而是比2的幂小1。@Jeppe他们一定实现了Next(n)
类似于NextDouble()*n
。这会导致一些n
产生巨大的偏差,例如。