아래의 파일은 컴파일되지만 실행되지 않습니다.C++ 파일이 실행되지 않지만 컴파일됩니다.
커서가 몇 번 깜박이면 중지하십시오. 문제가 무엇인지 모르시겠습니까?
런 1e7 슬래브 블록을 떠나는 입자 샘플. 아이디어는 슬래브를 x 방향으로 떠나는 평균 입자 수를 취하는 것입니다.
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <stdint.h>
#include <iostream>
#include <cstdlib>
int main(int argc, char **argv)
{
int i , J;
int numhistories = 1E7;
int num_batch = 1E3;
char * num_abs;
double N1 = 0.25;
double Smallsigma1 = 2.0;
double N2 = 0.75;
double Smallsigma2 = 0.5;
double Tsigma = (N1 * Smallsigma1) + (N2 * Smallsigma2);
double xmin = 0.0; // Slab geometry
double xmax = 5.0; // Slab geometry
double x, c , phi;
double count = 0, total_num_abs = 0;
num_abs = (char*) malloc (J+1);
if (num_abs==NULL) exit (1);
for (J = 0; J < num_batch; J++)
{
count = 0;
for (i = 1 ; i < numhistories ; i++)
{
// randomly intialize the x location of a neutron
x = xmax * (float)rand()/(float)(RAND_MAX) ;
// first interaction
c = 2 * (float)rand() - 1 ;
phi = (float)rand()/(float)RAND_MAX;
x += -log(phi) * c/Tsigma;
while ((x < xmax) && (x > xmin))
{
phi = (float)rand() /(float)RAND_MAX;
if (phi < 1/Tsigma)
{
count += 1 ;
break;
}
c = 2 * (float)rand() - 1 ;
phi = (float)rand() /(float)RAND_MAX;
x += (-log(phi)) * c/Tsigma;
}
}
num_abs[J] = count;
total_num_abs += num_abs[J];
}
double mean = (double)total_num_abs/(double)(numhistories * num_batch);
count = 0;
for (J = 0; J < num_batch; J++)
{
count += (num_abs[J] - numhistories * mean) * (num_abs[J] - numhistories *mean);
}
double variance = (double)count/(double)(num_batch * num_batch);
printf("mean = %f, variance = %f\n", mean , variance);
return 0;
}
디버거에서 실행하여 어떤 현상이 일어나는지보십시오. –
컴파일 된 모든 코드가 성공적으로 실행되면 우리의 작업은 ** 많이 ** 쉬울 것입니다. –
@ AlgirdasPreidžius 아니에요. 종종 템플릿 메타 프로그래밍 (컴파일 타임에 문제를 해결!)을 사용하여이 작업을 수행 할 수 있지만 실제로는 그렇게하기가 쉽지 않습니다. ;) – Yakk