【问题标题】:C# Generate random long number from double number [duplicate]C#从双数生成随机长数[重复]
【发布时间】:2021-09-03 11:55:50
【问题描述】:

我正在尝试从 python 转换为 C#

蟒蛇:

rand = random.randint(0, 2 ** 50)

这就是我在 C# 中所做的

var value = Math.Pow(2, 50);
var result = random.Next(0, Convert.ToInt32(value));

我收到了这个错误

Unhandled exception. System.OverflowException: Value was either too large or too small for an Int32.
   at System.Convert.ToInt32(Double value)

我想生成从 0 到值的范围

【问题讨论】:

  • 您是否需要将值设为int 并且的范围也介于 0 和 2^50 之间?可以是long吗?
  • An int (Int32) 只能保持接近 2^31 的值,所以:是的,如果您要求 2 中的值,它会溢出很多时间^50 范围; long 可以处理 2^63 - 也许更有用?
  • 而不是Math.Pow(2, 50); 使用1L << 50。在 python 中使用1 << 50
  • @harold 抱歉,我编辑了我的问题,它应该很长
  • 那你可能对Random number in long range, is this the way?的答案感兴趣

标签: c#


【解决方案1】:

在 C# 中,int 是 32 位。你有 2^50,需要 50 位。它总是太大。

你可以使用Convert.ToInt64(value),这很合适,但 Random 只返回一个 Int32。所以这有点毫无意义。

我建议使用 2^30。你不会得到更多的范围。无论如何,这 50 个看起来有点随意。

var value = Math.Pow(2, 30);

三思而后行

var result = random.Next();  // returns 0 .. Int32.MaxValue-1

并使用value 删除所有内容。

【讨论】:

  • 但我需要的是50
  • 然后使用 NextBytes() 查找链接的问题。另外,请确保您需要 50 位 random ,而不是 50 位 unique
猜你喜欢
  • 2012-05-16
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多