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);」実行されたようです;「Accepted 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 に答える