gpt4 book ai didi

c# - 将数字放入范围 C#

转载 作者:行者123 更新时间:2023-11-30 14:59:11 24 4
gpt4 key购买 nike

这可能已被广泛讨论,但我还找不到合适的答案。这是我的问题,我想在当前范围内输入一个数字,但数字是随机的。我不使用

Random rand = new Random(); 
rand.Next(0,100);

数字来自 GetHashCode(), 我必须把它放在范围 *[0, someArray.Length);

我试过了:

int a = 12345;
int currentIndex = a.GetHashCode();
currentIndex % someArray.Length + someArrayLength

但它不起作用。我将不胜感激任何帮助。

最佳答案

我会选择 (hash & 0x7FFFFFFF) % modulus。掩码确保输入为正,然后余数运算符 % 将其映射到目标范围。

备选方案包括:

result = hash % modulus;
if(result < 0)
result += modulus;

result = ((hash % modulus) + modulus) % modulus

不幸的是,不起作用的是

result = Math.Abs(hash) % modulus

因为 Math.Abs​​(int.MinValue)int.MinValue 因此是负数。要修复此方法,可以转换为 long:

result = (int)(Math.Abs((long)hash)) % modulus)

所有这些方法都会对某些输入范围和模值引入较小的偏差,因为除非输入值的数量是模数的整数倍,否则它们无法以相同的概率映射到每个输出值。在某些情况下,这可能是个问题,但对于哈希表来说没问题。

如果您主要关心性能,那么掩码解决方案是更可取的,因为与 % 或分支相比,& 是便宜的。

关于c# - 将数字放入范围 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17114772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com