Buongiorno a tutti, premetto che sono nuovo e che non sono riuscito a trovare una soluzione al mio problema (in verità un po' complicato) su altri siti, tranne che uno in cinese. Sto mettendo giù un programma per il calcolo della velocità probabile delle molecole di gas secondo la distribuzione di Maxwell, il quale prevede l'utilizzo di un paio di array monodimensionali di lunghezza 10^6 elementi. Risolti gli errori in fase di compilazione; in fase di collaudo il programma richiede come previsto temperatura e massa atomica del gas, ma restituisce return value 3221225620 come da titolo. Il debug con osservazione del vettore V dà come risultato "PROGRAM RECEIVED SIGNAL SIGFPE, arithmetic exception". Le formule mi sembrano giuste. Qualcuno ci capisce qualcosa? Grazie
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<cmath>
#include<ctime>
using namespace std;
float cmaxwell(float *t, float *v, float *mm){ //calcolo della probabilità della singola molecola
const float kb= 1.38e-23; //costante di Boltsmann
const float pg= 3.141;
float c= *mm/(2*kb**t);
float A= (4/(sqrt(pg)))*pow((*mm/(2*kb**t)),(3/2));
float exp= -c*pow(*v,2);
float pv= pow((A*pow(*v,2)),exp); //pressione utilizzando come termini C ed A indicati in precedenza
return pv;
}
float maxspeed(float *mm, float *t){ //calcolo della velocità massima delle molecole.
const float kb= 1.38e-23; //necessario in quanto limite per la generazione random del modulo velocità delle singole.
float vmax= (3*kb**t)/ *mm;
vmax=sqrt(vmax);
return vmax;
}
int main()
{
float t,mm; //temperatura, massa molecolare
int css,msa; //velocità generata casualmente, massima velocità secondo la funzione precedente
cout<<"Questo programma effettua il calcolo"<<endl<<"della velocita' piu' probabile e massima di un gas."<<endl<<"**********************************************************"<<endl;
cout<<"Inserire temperatura in Kelvin: ";
cin>>t;
cout<<"Inserire massa molecolare in u.m.a.: ";
cin>>mm;
float v[100000]={0}; //campione su 1x10^6 molecole
srand(time(NULL));
for(int ct=0; ct<100000; ct++){ //carico vettore
css=rand();
msa=maxspeed(&mm, &t);
v[ct]= css%msa;
}
float pv[100000]={0}; //calcolo della probabilità finale
for(int ct=0; ct<100000; ct++){
pv[ct]= cmaxwell(&t, &v[ct], &mm);
cout<<pv[ct]<<" "; //output di tutti i valori
}
/*Si precisa che più avanti implementerò le istruzioni per una media
dei valori e la ricerca del valor massimo; al momento mi interessa che il
programma calcoli i valori richiesti*/
return 0;
}