|
-
September 7th, 2011, 02:53 AM
#1
Weird behavior in ctor
Hello all,
Ive got a weird bug somewhere and have run out of clues as to how to track it down. I was adding some math routines to a library and when I started testing them, I got a strange behavior and not sure what it could be for EX:
Code:
MiniDec^ Sqr(MiniDec^ _val){
.
.
.
while(_iterations<_runs){
_current=_current+(_val/_current); <------this is how the alg was originally
_iterations+=1;
}
the alg now looks like this
while(_iterations<_runs){
_temp=gcnew MiniDec(_current); <-----on the first run through _current=1
_temp=_val/_temp;
_temp=_temp+_current;
_current=_temp;
_iterations+=1;
}
where I point out thats how the alg was originally, when it jumps into the division routine the values of val and current have changed (and it jumps straight from there to the division), so I changed it to see if I could figure out what was causing it.
As I pointed out above on the first run through _current=1 (this is not how it will run when finished, I just wanted it in a consistent state for debugging). And I know its value is 1 because I checked it in the ide before it went to the MiniDec ctor
the division routine:
Code:
static MiniDec^ operator/(MiniDec^ _val1, MiniDec^ _val2){ <-----values are not what was sent
MiniDec^ _retval=gcnew MiniDec();
.
.
.
return _retval;
}
MiniDec ctor:
Code:
MiniDec(MiniDec^ _val):MiniBI(){ <-------at this point _val does not equal one
.
.
.
}
when stepping through the code I get to the part of the alg that creates a new instance of MiniDec and I checked the value in the ide before stepping into the ctor, but somehow, when it gets to creating a new instance the value has changed to some apparantly random number (and I am checking it as soon as it gets to the ctor and again after it executes the very first instruction)
This is running in a single threaded app for testing, no other apps using the library are running, everything seems to work fine till it gets to this algorithm then I have this problem about half way into the alg. The full listing for it is:
Code:
MiniDec^ Sqr(MiniDec _value){
bool neg=false;
MiniDec^ power=gcnew MiniDec();
MiniDec^ temp=gcnew MiniDec(_value);
MiniDec^ half=gcnew MiniDec("1");
int _iterations=0;
int _runs=1000;
half=half/2;
if(temp<0){
temp=temp*-1;
neg=true;
}
while(temp>1){
temp=(temp-(temp%2))/2;
power=power+1;
}
temp=gcnew MiniDec(_value);
if(power==0){
power=gcnew MiniDec("1");
}
MiniDec^ retval=gcnew MiniDec();
MiniDec^ last=gcnew MiniDec();
MiniDec^ current=gcnew MiniDec();
MiniDec^ _retval=gcnew MiniDec();
retval=power;
current=power;
power=gcnew MiniDec(); <------ everything appears to work to this point
while(_iterations<_runs){
_current=_current+(_val/_current); <---but screws up here
_iterations+=1;
}
_retval=current;
return _retval;
}
where I put it screws up there I mean when it goes into the division part, the values that make it to the division routine are not the same as the values that were sent to it.
everything else tested so far either worked or had a small error which I fixed, but I cant figure out where this error is.
Thanks in advance
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|