精确C等效于Java Random.nextInt(int bound)方法

时间:2017-07-17 14:14:26

标签: c random code-translation

我正在开发一个项目,我将一些Java代码移植到C.到目前为止,一切都进展顺利,但我仍然坚持将Random.nextInt(int bound)方法移植到C中。

我的Java代码是:

int arr[] = new int[100000];
Random r = new Random(0);
for (int i = 0; i < 100000; i++)
    arr[i] = r.nextInt(20);

其中 arr 数组始终具有相同的内容(每次执行后),这是正常的。

我的等效C代码是:

int arr[100000], i;

srand(0);
for (i = 0; i < 100000: i++)
    arr[i] = rand() % 20;

两个 arr 数组的内容不相同。

我想将生成的随机数打印到Java代码中的文件中,以便将它们(数字)用作C代码中的常量数组,而不是使用rand()函数,但数组的大小将是如此巨大这将阻止我这样做,因为C代码可以在嵌入式设备(微控制器)上工作。

我的问题是如何将Java代码移植到C中,我可以获得相同的随机数?

2 个答案:

答案 0 :(得分:1)

C中的Java Random类和rand使用两个不同的伪随机数生成器。您将无法使用C语言重现与C完全相同的随机数。

您编写应用程序的方式应该避免取决于具有完全相同的随机数。

答案 1 :(得分:-1)

Java JDK源是公开的。

如果你想要在C中使用Java的随机数生成器,请抓住源代码并自行编写/移植它。