Ik heb een DLL die een stukje sharedmemory aanmaakt. Deze wordt gevuld met een struct:
Nu wordt er in de DLL een integratiestap uitgerekend:
dH is dus een double tijdens het runnen van deze code krijg ik ook geen foutmeldingen. Als ik echt het stukje shared memory wil uitlezen waar dH in gezet is krijg ik "NaN" (Not a number).
Stel ik maak van die laatste regel pSmo->dH=30.05; ipv pSmo->dH=dH; lees ik deze 30.05 wel uit.
Hoe kan dit? Is die dH die ik hierboven uitreken toch niet helemaal goed.
Ik heb de code zonder shared memory getest (de integratiestap dus) Dit werkt prima en alles wordt goed uitgerekend, maar als ik het met shared memory wil laten werken doet hij het niet.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| struct Smo { bool bOpened; // file opened to write bool bInit; // true if smo is ready for use; hamilton is ok double dStates[6000]; // 2*dimension*(nodes+1) +1 is for the R state double dStatesBegin[6000]; // 2*dimension*(nodes+1) +1 is for the R state for the begin double dCoefficient[6000]; // Number of coeffiencts for the Hamilton int iNumberOfVariabeles[6000]; // number of varabeles per term int iVariabeles[24000]; // which states; double dFriction; int iDimension; double dDeltaT; // stepsize double dTime; // runtime int iSteps; // number of steps taken double dH; // current H bool bEnableHCalculation; int iNumberOfNodes; double dMatrix[1000][1000]; // start matrix }; |
Nu wordt er in de DLL een integratiestap uitgerekend:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| double dH=0; int iWhichCoeff=0; int iWhichVar=0; double dTemp; while (iWhichCoeff<iMaxTerms){ if (pSmo->dCoefficient[iWhichCoeff]==0) break; dTemp=pSmo->dCoefficient[iWhichCoeff]; for (int iLoop=0;iLoop<pSmo->iNumberOfVariabeles[iWhichCoeff];iLoop++){ dTemp=dTemp*pSmo->dStates[pSmo->iVariabeles[iWhichVar+iLoop]]; } dH+=dTemp; iWhichVar+=pSmo->iNumberOfVariabeles[iWhichCoeff]; iWhichCoeff++; } pSmo->dH=dH; |
dH is dus een double tijdens het runnen van deze code krijg ik ook geen foutmeldingen. Als ik echt het stukje shared memory wil uitlezen waar dH in gezet is krijg ik "NaN" (Not a number).
Stel ik maak van die laatste regel pSmo->dH=30.05; ipv pSmo->dH=dH; lees ik deze 30.05 wel uit.
Hoe kan dit? Is die dH die ik hierboven uitreken toch niet helemaal goed.
Ik heb de code zonder shared memory getest (de integratiestap dus) Dit werkt prima en alles wordt goed uitgerekend, maar als ik het met shared memory wil laten werken doet hij het niet.
if broken it is, fix it you should