这是我使用 C++ 和一些预定义类在ROOT框架中编写的宏的一部分。在包含下面标记的行(以 开头)时,我得到一个浮点异常minv = ...
。这个错误的原因是什么?
Double_t ppx[3000],ppy[3000],ppz[3000],pE[3000];
Double_t m = 0.000511;
Double_t minv,epx,epy,epz,eE;
for(Int_t n = 0; n < nEvents; n++) {
inTree->GetEntry(n);
Int_t nTracks = trackArray->GetEntries();
htrack->Fill(nTracks);
for(Int_t i = 0; i < nTracks; i++) {
Track* trackData = (Track*)trackArray->At(i);
if(trackData->fCharge ==1)
{
ppx[i] = (trackData->fPt) * TMath::Cos(trackData->fPhi);
ppy[i] = (trackData->fPt) * TMath::Sin(trackData->fPhi);
ppz[i] = (trackData->fPt) * sinh(trackData->fEta);
pE[i] = m * m - ppx[i] * ppx[i] - ppy[i] * ppy[i] - ppz[i] * ppz[i];
}
hPt->Fill(trackData->fPt);
}
for(Int_t i = 0; i < nTracks; i++) {
Track* trackData = (Track*)trackArray->At(i);
if(trackData->fCharge == -1)
for (Int_t k=0;k<nTracks;k++){
epx = (trackData->fPt) * TMath::Cos(trackData->fPhi);
epy = (trackData->fPt) * TMath::Sin(trackData->fPhi);
epz = (trackData->fPt) * sinh(trackData->fEta);
eE = m*m - epx *epx - epy * epy - epz * epz;
// the following two lines cause the exception:
minv = ((eE +pE[k]) * (eE + pE[k])) - ((epx + ppx[k]) * (epx + ppx[k])) - ((epy + ppy[k]) * (epy + ppy[k])) - ((epz + ppz[k]) * (epz + ppz[k]) );
invm->Fill(minv);
}
}
}
nEventsProcessed++;
}
PS:我知道这不是很有效的编码,我是初学者。
我打印出了 minv 的值。这是一个指示输出的小样本
-0.225634
-0.657662
-0.225634
1.53201
-0.225634
nan
-0.630927
-0.225634
-0.225634
-0.225634
-0.225634
-0.228794
-0.225634
-0.7196
-0.225634
-0.225634
-0.520265
-0.228796
0.608326
-0.225634
-0.225634
-0.225634
-0.733564
2.74301
-0.763932
-0.225634
-0.225634
nan
-0.228643
-0.225634
-0.225634
-0.225634
-0.584549
补充:nan的很奇怪。它们附近的数字看起来很正常,这不是一个爆炸的函数,所以我是否使用了数组的垃圾值?