如何将此C 代码转换为C#

How do I convert this bit of C++ code to C#?

本文关键字:转换 代码      更新时间:2023-10-16

尝试转换一些代码,但是对于我所有的谷歌搜索,我都无法弄清楚如何转换这个位。

    float fR = fHatRandom(fRadius);
    float fQ = fLineRandom(fAngularSpread ) * (rand()&1 ? 1.0 : -1.0);
    float fK = 1;

这个位

(rand()&1 ? 1.0 : -1.0); 

我不知道。

是1或-1,有50/50的机会。

等效的C#代码是:

((new Random().Next(0, 2)) == 0) ? 1.0 : -1.0; 

Next(0,2)将返回0或1。

如果代码被大量调用,则应存储Random的实例并重新使用它。当您创建Random的新实例时,它会使用确定伪随机数字序列的种子初始化。为了具有更好的"随机性",您不应该经常重新定位随机序列。

您可以使用

Random rnd = new Random();
(rnd.NextInt(2) * 2 -1); // 1 or -1

C 样本会生成一个随机数,使用其最低位并扔掉其余的。然后最低位用于选择-1或1。

在C#中,等效物如下。

new Random().Next(0, 2) * 2 - 1

重要:如果您在循环中执行此操作,请将Random的实例存储在某个地方,仅在循环中调用Next,而不是再次将构造函数调用。这不仅是性能优化。否则,您会看到大约100毫秒的相同持续时间序列的序列,因此请呼叫随机的无参数构造函数,并且在您的应用程序的启动下,理想情况下一个。

1.0或-1.0,一个相等的机会

rand()生成一个数字女巫与0x01一起,即第一个位,并取决于您是否有一点,您得到1.0或-1.0

您可以像其他人所说的那样,只有50%的机会随机化。

如果您想要精确的翻译,那将是:

((new Random().Next() & 1 > 0) ? 1.0 : -1.0)

您必须从条件表达的第一部分中进行布尔。