如何将此C 代码转换为C#
How do I convert this bit of C++ code to C#?
尝试转换一些代码,但是对于我所有的谷歌搜索,我都无法弄清楚如何转换这个位。
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)
您必须从条件表达的第一部分中进行布尔。
相关文章:
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在混合代码库中将C转换为C++时出现许多包含错误
- 为什么g++在未执行的代码处标记强制转换错误
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 16 位到 10 位转换代码说明
- 以下对二进制转换代码的小数如何工作
- 中缀到后缀表达式转换代码不起作用
- C++中的十进制到十六进制转换代码
- 这个后缀转换 C++ 代码的中缀有什么问题
- 如何优化 YUV 到 RGB 颜色转换代码
- Win32 键转换代码输出不需要的按键
- C++ NV12 到 RGB24 转换代码
- 转换代码以使用矢量
- C++货币转换代码
- 这段c++类型转换代码在做什么?
- 缓慢运行的方向转换代码
- 在c++中转换代码页
- 转换代码从SSE2到SSE4在C
- MATLAB到c++的行转换代码
- 如何编写可转换代码,32位/64位