真的,我想获得随机位序列模式,请告诉我逻辑如何获得序列模式。
我尝试使用下面的(示例)代码来获取像这样的随机位序列模式
public class TrueFalseConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((bool)value == true) ? 1 : 0;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((sbyte)value == 1) ? true : false;
}
}
但我只得到恒定的价值,没有像这样的任何改变
2147483663, 1073741831, 536870915, 2415919105, 1207959552, 2751463424, 3523215360, 1761607680, 3028287488, 3661627392, 1830813696
请找到附件并建议我。我很感激。
1932117999, 1932117999, 1932117999, 1932117999, 1932117999, 1932117999, 1932117999, 1932117999, 1932117999, 1932117999
答案 0 :(得分:0)
首先,为它创建特殊功能。 其次,在每次迭代时使用静态变量来保存进度。
#include <stdio.h>
unsigned long long random()
{
static unsigned int x =12131222, y=898565;
static unsigned int z=58964796, c=6543217;
unsigned long long t, result;
x = 14900243 * x+ 123456789;
y ^= y << 21;
y ^= y >> 17;
y ^= y << 30;
/* Do not set y=0! */
t = 42945843 * z + c;
c = t >> 32;
z = t;
return result=(unsigned int)(x>>32) + (unsigned int)y +z;
}
int main()
{
unsigned int r;
int i;
for ( i = 0; i < 10; i++)
{
r = random(); //use the LFSR
printf ("%u, ", r);
}
return 0;
}
或者将代码移到循环中:
#include <stdio.h>
int main()
{
unsigned int x =12131222, y=898565;
unsigned int z=58964796, c=6543217;
unsigned long long t, result;
unsigned int r;
int i;
for ( i = 0; i < 10; i++)
{
x = 14900243 * x+ 123456789;
y ^= y << 21;
y ^= y >> 17;
y ^= y << 30;
/* Do not set y=0! */
t = 42945843 * z + c;
c = t >> 32;
z = t;
result=(unsigned int)(x>>32) + (unsigned int)y +z;
r = result; //use the LFSR
printf ("%u, ", r);
}
return 0;
}
答案 1 :(得分:0)
通常,您不应编写自己的伪随机数代码。使用srand()进行种子设定,使用rand()进行计算,如下所示:C++ random float number generation 仍然有更优质的随机数选项,但这是一个起点。