【发布时间】:2018-06-10 02:02:31
【问题描述】:
我正在开发一款游戏 (Unity),我需要根据多个 int 和/或 float 创建一个随机浮点值(介于 0 和 1 之间)。
我认为手动为函数创建单个字符串会更容易,但也许它可以接受int 和/或float 的列表。
结果示例:
-
"[5-91]-52-1">0.158756..
要点:
- 结果的分布(0 和 1 之间)必须相等(不希望 90% 的结果在 0.45 和 0.55 之间)
- 询问 2 次相同的字符串必须返回完全相同的结果(即使我重新加载应用程序,或在不同的计算机上启动它,..)
- 结果不必是唯一的。
奖励积分:
- 有时我需要关闭类似的字符串返回关闭结果,但不是每次。 “随机生成”可以使用此功能处理布尔值吗?
【问题讨论】:
-
使用字符串的哈希码作为
Random对象的种子可能吗? -
看起来不错的解决方案,谢谢。我正在检查那个。我只是关心创建一个新的
Random对象并为每个请求设置一个新种子,是不是太重了?而不是设置种子并在其上请求多个号码(normal使用) -
创建多个实例并不繁重;它通常只会导致您实际瞄准的场景(复制序列);这通常是不受欢迎的
-
好的,非常感谢。最后一个问题(接近奖励点),哈希码的分布以及它与种子设置的联系是什么?例如:如果我用
[声明每个字符串,它会影响结果分布还是根本不影响? (您也可以创建一个回复以设置为答案) -
如果即使在程序重新启动后(或在程序的多个实例之间)您仍需要相同的结果,您应该知道Object.GetHashCode() 保证仅在原始应用程序内返回相同的值-域,否则您可能需要创建自己的哈希函数实现,即使在应用程序域之间也能返回稳定的结果。