c - C 中的 Metropolis 函数的意外输出

标签 c

我目前正在用 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。我怀疑我可能引用了错误的数据类型或类似的东西。大家有什么想法吗?

谢谢!

最佳答案

你想要

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

关于c - C 中的 Metropolis 函数的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17435437/

相关文章:

c - 为什么在将数字转换为无符号类型时会对其进行符号扩展?

c - C 中数组存储在哪里?

c - 按位检查有符号乘法溢出会产生意外结果

c - Lua - pcall "entry point"

c - 汉诺塔中圆盘的移动

c - 有符号整数的算术右移

c - 为什么我们要选择自动类型存储类?

C编程。使用 fopen fclose 进行文本文件操作

c - Win32 ListView常用控件重画问题

c++ - 一次读取完整文件是个好主意吗?