Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
浮点异常的原因? 这是我用C++和一些预定义类编写的宏的一部分。在包含下面标记的行(以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++; }_C++_Root Framework - Fatal编程技术网

浮点异常的原因? 这是我用C++和一些预定义类编写的宏的一部分。在包含下面标记的行(以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++; }

浮点异常的原因? 这是我用C++和一些预定义类编写的宏的一部分。在包含下面标记的行(以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++; },c++,root-framework,C++,Root Framework,另外:楠家的人很奇怪。它们附近的数字看起来很正常,这不是一个爆炸的函数,所以我是不是在数组中使用垃圾值 在所有磁道的第一个回路中,只有磁道电荷为正时,才能填充阵列。在第二个循环中,无论第k轨道的电荷是否为正,都可以访问阵列 如果只想为相反的带电轨迹填充minv(我猜是不变质量),请移除第一个检查正电荷的If,并将最后一个回路更改为: for (Int_t i=0; i<nTracks; i++) { Track* trackData = (Track*)trackArray->

另外:楠家的人很奇怪。它们附近的数字看起来很正常,这不是一个爆炸的函数,所以我是不是在数组中使用垃圾值

在所有磁道的第一个回路中,只有磁道电荷为正时,才能填充阵列。在第二个循环中,无论第k轨道的电荷是否为正,都可以访问阵列

如果只想为相反的带电轨迹填充
minv
(我猜是不变质量),请移除第一个检查正电荷的
If
,并将最后一个回路更改为:

for (Int_t i=0; i<nTracks; i++) {
    Track* trackData = (Track*)trackArray->At(i);
    for (Int_t k=0; k<nTracks; k++){
        Track* trackData2 = (Track*)trackArray->At(k);
        if (trackData->fCharge == trackData2->fCharge)
            continue;

        // calculate minv here
        invm->Fill(minv);
    }
}
for(Int_t i=0;iAt(i);
对于(Int_t k=0;kAt(k);
如果(trackData->fCharge==trackData2->fCharge)
继续;
//在这里计算minv
invm->填充(最小值);
}
}

要传递给
invm->Fill(minv)的
minv的值是多少
?…您应该能够在调试器中看到该值…当您说删除这两行将删除异常时,您要么在计算
minv
时得到它,要么在
invm
对象中发生了什么。此外,我们不知道填充()在第119行中,您可能应该打印出异常点的值,以查看它试图计算的内容。@Plasmah Fill()是一个用于填充直方图中条目的例程。如果它与矩阵求逆相关,它可能是一个零除。您有几次
nan
。这很可能是错误的原因。在我看来,您需要调试给出
minv
的表达式。顺便说一句,此算法与我的算法不同。在我的情况下,我是确保所有电荷都有相同的大小,我要找到正负对的不变质量,这就是为什么我有两个if语句。啊,好吧,我认为这是偶然的。好吧,它应该很容易改变。
for (Int_t i=0; i<nTracks; i++) {
    Track* trackData = (Track*)trackArray->At(i);
    for (Int_t k=0; k<nTracks; k++){
        Track* trackData2 = (Track*)trackArray->At(k);
        if (trackData->fCharge == trackData2->fCharge)
            continue;

        // calculate minv here
        invm->Fill(minv);
    }
}