0

我目前正在用 C 编写一些用于模拟退火的代码。我在使用这个函数时遇到了问题:

int metrop (E, E1, T)
{
   int j;
   if (exp((-E-E1)/T) > ran())
    j = 2;
    printf("Random# %lf\n",ran());
   if (E-E1<0)
    j = 2;

   else
   j = 0;

   if (j=1)
    printf("Accepted %d",j);
   if (j=0)
    printf("Rejected");
   return(j);
}

无论 E、E1 和 T 的输入如何,“if (j=1) printf("Accepted %lf",j);" 似乎已执行;给出“已接受 1”的输出。即使在这段代码中,j 不可能等于 1。我怀疑我可能引用了错误的数据类型或类似的东西。有人有想法么?

谢谢!

4

1 回答 1

1

你要

if (j == 1)  // j == 1 evaluates to true if j is 1, evaluates to false otherwise

使用:

if (j = 1)

设置 j 等于 1 并且本质上是

if (1)  // always true
于 2013-07-02T21:40:17.617 回答