以下のファイルはコンパイルされますが実行されません。C++ファイルは実行されませんが、コンパイルされます
カーソルが数回点滅してから停止します。何が問題なのか分からない?
run 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