0

所以我正在尝试将这段代码转换为在我的 Java 程序中使用。但是,它有一个指针,我不确定将它翻译成 Java 的最佳方式是什么。

/**
* 32-bit Multiplicative Congruential Pseudo Random Number Generator
* Microsoft Visual C++ Version
*/
#include <math.h>
/**
* The seed used by randomNumberGenerator.
*/
long gv_lRandomNumberSeed;
/**
* Returns a random number between 0.0 and 1.0.
* plSeed - Pointer to the seed value to use.
*/
double randomNumberGenerator( long* plSeed ) {
double dZ;
double dQuot;
long lQuot;
dZ = ( *plSeed ) * 16807;
dQuot = dZ / 2147483647;
lQuot = ( long ) floor( dQuot );
dZ -= lQuot * 2147483647;
( *plSeed ) = ( long ) floor( dZ );
return ( dZ / 2147483647 );
}

我需要能够使用此函数中返回的上述数字:

/**
* Returns a random variate from an exponential probability
* distribution with the given mean value of dMean.
*/
double exponentialRVG( double dMean ) {
return ( -dMean * log( randomNumberGenerator( &gv_lRandomNumberSeed 
) ) );
}

并且能够为 dMean 输入一个值并获得一个值作为回报..

有什么帮助吗?

(我知道很多人对这个网站上发布的问题很生气,请尽量不要消极,如果是这样的话,请帮助我更好地提出问题)

4

5 回答 5

2

该指针用于创建plSeed一个 inout 变量。

由于您已经将其randomNumberGenerator放入某个类,因此您应该将函数参数plSeed提升为该类的字段。

于 2013-04-25T03:46:48.753 回答
1

指针用于更新参数的值。我建议重新组织代码以避免使用这样的参数(并直接访问类变量gv_lRandomNumberSeed)。其余代码相当直接地转换为 Java(如果您熟悉 Java 的Random类)。

哦,请在移植时去掉匈牙利符号。

于 2013-04-25T03:47:12.803 回答
1

选择包括:

  • 将种子作为字段放在与方法 randomNumberGenerator() 相同的类中。
  • 将可变对象参数中的种子传递给 randomNumberGenerator()。
  • 返回包含新值和新种子的对象中的种子。

Java 的 Random 类使用第一种方法。对于方法的调用者来说,这是最简单的。

于 2013-04-25T03:48:11.823 回答
0

使用JNI(Java Native Interface)技术。使用 JNI,您可以从 java 调用 C 函数。

于 2013-04-25T03:46:40.913 回答
0

该指针基本上只是引用参数的 C 等价物。您可以通过多种方式在 Java 中实现相同的目标。看看下面问题中的答案:

我可以在Java中通过引用传递参数吗?

于 2013-05-03T03:16:52.153 回答