В настоящее время я пишу некоторые код для имитации отжига в 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);" как представляется, выполняется, выдавая результат «Принято 1». Несмотря на то, что в этом коде невозможно, чтобы j было равно 1. Я подозреваю, что могу ссылаться на неправильные типы данных или что-то в этом роде. У кого-нибудь есть идеи?
Спасибо!
', если (J == 1)', 'не, если (j = 1) '... –
у вас есть около 0 опыта программирования, не так ли? Не отступайте на 1, не предполагайте, что отступ определяет блок, не предполагайте, что ran() возвращает тот же номер дважды ... –
пытается, если (1 == j) облегчает запоминание и избегает таких obfuscations. –