kray_zemli (kray_zemli) wrote,
kray_zemli
kray_zemli

На зависть индусским программистам

Даже не пытайтесь понять, что делает следующий код. Я предупреждал!
for (;;)
{
	npair = dmol?nmol[0]*(nmol[0]-1)/2:(nmol[0]*nmol[1]);
	if (!npair) break;
	t0 += log(get_random_real()) / (ncol0 * mcs * npair);
	if (t0 < 0) break;
	cco1++;
	mol[0] = base[0] + get_random_integer(nmol[0]);
	mo[0] = mols_array+mols_index[mt[0]+1][mol[0]];
	do {
		mol[1] = base[1] + get_random_integer(nmol[1]);
		mo[1] = mols_array+mols_index[mt[1]+1][mol[1]];
	} while (mo[0] == mo[1]);
	for (cc=0; cc < 3; cc++)
		vrel[cc+1] = mo[0]->v[cc] - mo[1]->v[cc];
	vrel[4] = vrel[2]*vrel[2]+vrel[3]*vrel[3];
	vrel[5] = vrel[4]+vrel[1]*vrel[1];
	FLOAT maxw;
	FLOAT wi[2];
	bool flg;
	wi[0] = mo[0]->weight * fw[0];
	wi[1] = mo[1]->weight * fw[1];
	flg = wi[0]<wi[1];
	maxw = wi[flg];
	cs = ci->x1 * pow(vrel[5],ci->x2) * maxw;
	if ((mcs*get_random_real()) < cs)
	{						
		if (cs > mcs) mcs = cs;
		mol[2] = mol[3] = 0;
		SINT32 NC[2], NCOL;
		bool kf[4], nflg;
		FLOAT wi0, wi2, minw;
		kf[2] = kf[3] = false;
		if (dmol && (mol[1] < mol[0]))
		{
			UINT32 ss;
			Molecule_t *m3;
			ss = mol[0];
			mol[0] = mol[1];
			mol[1] = ss;
			m3 = mo[0];
			mo[0] = mo[1];
			mo[1] = m3;
			nflg = flg;
			flg = !flg;
			minw = wi[flg];
		} else
		{
			nflg = !flg;
			minw = wi[nflg];
		}
		wi0 = (maxw-minw)*fw[2+flg];
		wi2 = minw*fw[2+flg];
		NC[nflg] = minw*fw[2+nflg]+get_random_real();
		kf[nflg] = true;
		if (wi0 >= 1)
		{
			mo[flg]->weight = wi0*cell->weight;
			NC[flg] = wi2+get_random_real();
			kf[flg] = false;
		} else
		{
			int a;
			NC[flg] = wi2;
			a = get_random_real() >= wi0;
			kf[flg] = a;
			NC[flg] += (((a-wi0)*get_random_real()) < (wi2-NC[flg]+a-1));
			mo[flg]->weight = cell->weight;
		}
		for (NCOL=(NC[0]<NC[1])?NC[1]:NC[0]; NCOL; NCOL--)
		{
			if (!kf[2])
			{
				mol[2] = mols_index_size[mt[0]+1];
				mo[2] = alloc_mol();
				if (!mo[2])
				{
					Log("!Can't create collided mol");
					exit(1);
				}
				add_mols_index(mt[0]+1, mo[2]-mols_array);
				nmol[0]++;
				nmol[1] += dmol;
				mo[0] = mols_array+mols_index[mt[0]+1][mol[0]];
				mo[1] = mols_array+mols_index[mt[1]+1][mol[1]];
				mo[3] = mols_array+mols_index[mt[1]+1][mol[3]];
				kf[2] = true;
			}
			if (!kf[3])
			{
				mol[3] = mols_index_size[mt[1]+1];
				mo[3] = alloc_mol();
				if (!mo[3])
				{
					Log("!Can't create collided mol");
					exit(1);
				}
				add_mols_index(mt[1]+1, mo[3]-mols_array);
				nmol[1]++;
				nmol[0] += dmol;
				mo[0] = mols_array+mols_index[mt[0]+1][mol[0]];
				mo[1] = mols_array+mols_index[mt[1]+1][mol[1]];
				mo[2] = mols_array+mols_index[mt[0]+1][mol[2]];
				kf[3] = true;
			}
			*(mo[2])=*(mo[0]);
			*(mo[3])=*(mo[1]);
			DoCollide(mt[0], mt[1], mo[2], mo[3], ci, vrel);
			if ((NCOL*get_random_real()) < NC[0])
			{
				mo[2]->weight = cell->weight;
				NC[0]--;
				kf[2] = false;
			}
			if ((NCOL*get_random_real()) < NC[1])
			{
				mo[3]->weight = cell->weight;
				NC[1]--;
				kf[3] = false;
			}
		}
		for (j=3; j >= 0; j--)
		{
			int a = kf[j];
			if (a)
			{
				int k = j&1;
				int mk = mt[k];
				delete_mol(mo[j]);
				nmol[k]--;
				nmol[1-k] -= dmol;
				mols_index[mk+1][mol[j]] = mols_index[mk+1][--mols_index_size[mk+1]];
			}
		}
	}
}

Если кому интересно -- это отрывок из моей старой расчётной программы.

Вы всё ещё советуете мне устроиться программистом?
Subscribe

  • ChatGPT vs DeepSeek

    Напиши функцию на C/C++, которая бы вычисляла количество "счастливых билетов" (у которых сумма первых 3 цифр 6-значного номера равна сумме последних…

  • Ещё ChatGPT vs DeepSeek

    Вопрос ChatGPT DeepSeek о чём этот отрывок? --- — Скажи, Ваван, когда ты за границей бываешь, унижение чувствуешь? — Я там не был никогда, —…

  • Попросил DeepSeek и ChatGPT объяснить кое-какие афоризмы и забавные фразы

    Афоризм ChatGPT DeepSeek Чем больше в книге воды, тем она глубже. Это ироничный взгляд на книги с избыточной информацией или заполняющимися…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 12 comments

  • ChatGPT vs DeepSeek

    Напиши функцию на C/C++, которая бы вычисляла количество "счастливых билетов" (у которых сумма первых 3 цифр 6-значного номера равна сумме последних…

  • Ещё ChatGPT vs DeepSeek

    Вопрос ChatGPT DeepSeek о чём этот отрывок? --- — Скажи, Ваван, когда ты за границей бываешь, унижение чувствуешь? — Я там не был никогда, —…

  • Попросил DeepSeek и ChatGPT объяснить кое-какие афоризмы и забавные фразы

    Афоризм ChatGPT DeepSeek Чем больше в книге воды, тем она глубже. Это ироничный взгляд на книги с избыточной информацией или заполняющимися…