【问题标题】:Uniform random numbers to simulate with ten decimal places [closed]用十位小数模拟的统一随机数[关闭]
【发布时间】:2013-05-09 20:41:33
【问题描述】:

我正在尝试运行一个特定的模拟,我实现了一些代码,但结果不是我所期望的,我需要生成具有 10 个小数位的随机统一(范围从 0 到 1)数字(在为了将其转换为其他发行版)。示例:0,0345637897, 0,3445627876, 0,9776428487

这是代码:

double next = r.Next(1000000000, 9999999999);
return double.Parse(String.Format("0.{0}", next));

【问题讨论】:

  • 请发布您现有的代码,以便我们查看您已经尝试过的内容
  • 你的结果是什么? (除了意外)。他们怎么了?
  • 不太清楚,能否给我们一些代码?

标签: c# random uniform


【解决方案1】:

这就够了:

double v = Math.Round(myRandom.NextDouble(), 10);

0.1230.1230000000 之间的区别在于格式问题,请参阅@SamIAm 的答案。


编辑后:

double next = r.Next(1000000000, 9999999999);
return double.Parse(String.Format("0.{0}", next));

这是一个介于 1000000000 和 9999999999 之间的整数,然后使用默认区域性将其转换为双精度(在 0 ... 1.0 范围内)。

由于您似乎使用逗号 (,) 作为小数分隔符,因此至少使用

return double.Parse(String.Format("0.{0}", next), CultureInfo.Invariant);

【讨论】:

  • 如果你不太在意随机质量,那么可以
  • 再一次,在这种情况下,什么是“质量”?
  • 只需阅读我发布的链接中的帖子。它解释了它
【解决方案2】:

您是否正在寻找填充输出?因为你可以用String.Format()做到这一点

string s = String.Format({0:0000000000}, i);

你也可以用双精度或浮点数来做

string s = String.Format("{0:0.0000000000}", d);

如果您需要随机双精度,只需制作一个,并在打印时用小数点后 10 位填充。

Random random = new Random();
double d = random.NextDouble()

【讨论】:

  • 我真的不认为这是问题要问的。
  • random.NextDouble() * 9999999999 完全错误,LongRandom 不是所要求的。
  • @HenkHolterman 抱歉,让我感到困惑的是用作小数点的逗号
【解决方案3】:

我建议使用 RNGCryptoServiceProvider。它将产生高质量的随机数

看到这个帖子:Why use the C# class System.Random at all instead of System.Security.Cryptography.RandomNumberGenerator?

【讨论】:

  • 你能解释一下你将如何使用它吗?
  • 什么决定了随机数的“质量”?
  • @HenkHolterman 这个数字有多随机。 Random() 使用计算机时钟或其他任何东西,创建重复序列。太坏了!真正的随机需要像阅读静态空间干扰之类的东西......
  • 我知道区别,请参阅我对链接问题的回答。 OP只想模拟一些东西。统计参数适用,安全性不适用。
猜你喜欢
  • 2013-04-13
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
相关资源
最近更新 更多