C中的log(1-var)操作

时间:2012-03-30 17:26:33

标签: c math

我正在尝试编码this算法。我被困在log((1.0-u)/u))/beta的部分; 据我所知,我无法在C中得到这个结果,因为它总会返回负值log(返回虚数值)。 试图打印log(1-5)的结果,例如,它给了我Nan。 我怎样才能得到

的结果
double x = (alpha - log((1.0-u)/u))/beta

然后?

非常感谢任何指针来解决这个问题。

谢谢

5 个答案:

答案 0 :(得分:3)

在该算法中,u应在[0,1]上均匀随机,因此数量(1-u)/u永远不会为负。

答案 1 :(得分:2)

不要在范围u之外传递(0,1)的值(这在该文章的其中一条评论中提到)。请注意,()表示打开(即排他性)边界。

答案 2 :(得分:1)

如上所述,您需要u的范围为(0,1)(如果您是0或1,则您遇到麻烦)。您可能正在使用rand(),在这种情况下您需要

double u = (rand() + 1) / (double)(RAND_MAX + 2);
double x = (alpha - log((1.0-u)/u))/beta

答案 3 :(得分:0)

我猜你是在0和1之间,因此是一个归一化的正随机。

答案 4 :(得分:0)

log( (1-u)/u ) = log(1-u)-log(u)因此u需要0<u<1。图表看起来像这样

log(1-u)-log(u)

事实上,您可以通过u=0.5看到反对称性,您可能只需担心00.5之间的值,但不包括0。因此,对于u&gt; 0.5,您需要设置u=1-u并返回-log(1-u)+log(u)