[c++] shared memory en doubles -> NaN

Pagina: 1
Acties:

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 01-02 09:13
Ik heb een DLL die een stukje sharedmemory aanmaakt. Deze wordt gevuld met een struct:

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


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13-02 18:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

alignment issues? Zijn het verschillende applicaties die gebruik maken van het shared memory?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 01-02 09:13
Nee, alleen de door mij geschreven programma's

De DLL wordt wel door een extern programma aangeroepen, maar dit externe programma heeft niets met de shared memory te maken.

En als het een alignment issue zou zijn, zou het toch ook nietmoeten werken als ik pSmo->dH=30.05 invulde?

[ Voor 26% gewijzigd door elgringo op 19-07-2006 15:50 ]

if broken it is, fix it you should


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13-02 18:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

elgringo schreef op woensdag 19 juli 2006 @ 15:50:
Nee, alleen de door mij geschreven programma's
Ik bedoelde of het wel daadwerkelijk verschillende programma's zijn die het gesharede geheugen gebruiken - als je ze allemaal zelf gemaakt hebt, zijn het dan verschillende projecten?
En als het een alignment issue zou zijn, zou het toch ook nietmoeten werken als ik pSmo->dH=30.05 invulde?
Dat is waar. Initialiseer je de struct wel na allocatie?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 01-02 09:13
.oisyn schreef op woensdag 19 juli 2006 @ 16:17:
[...]

Ik bedoelde of het wel daadwerkelijk verschillende programma's zijn die het gesharede geheugen gebruiken - als je ze allemaal zelf gemaakt hebt, zijn het dan verschillende projecten?


[...]

Dat is waar. Initialiseer je de struct wel na allocatie?
Het zijn 2 projecten: 1 dll (die onder een simulatie programma hangt) en een gui waar deze dll ingesteld kan worden.

Struct wordt goed gemaakt.

Ik heb het probleem inmiddels gevonden: Men neme een fout stukje code waardoor die double oneindig wordt. Hij wordt eerst INF en dan NaN. Code aangepast en alles werkt weer. Soms moet je niet zo moeilijk denken :D

if broken it is, fix it you should