Re: Help please, strange behavior
Simply_Red wrote:
On 14 f?v, 14:12, "Victor Bazarov" <v.Abaza...@comAcast.net> wrote:
Simply_Redwrote:
i'm sorry i posted this in other groupes, and i didn't see it, and
as this group is most actif, i repost it here, and sorry for
mutliposting:
Hi,
i'm using VC6, i have this declaration:
typedef struct tagTLimite {
double Debut;
double Fin;
}Limites;
typedef struct TagElemTab {
double NivY;
bool Existe;
std::vector<Limites> PtLimites;
}ElemTabCont;
void myfunc( )
{
.....
ElemTabCont * ContNonOrd;//contour non ordone
long nbNiveau = (yhi-ylo)/stepY +1 ;
What is the type of 'yhi', 'ylo', 'stepY'? What are their values?
What value do you get in 'nbNiveau'? What did you expect
yhi, ylo, stepY are doubles values: 16, 0, 0.1 respectively
I get 160 in nbNiveau, and I need 161.
You have stumbled upon a well-known (now to you as well) situation
when 16/0.1 is not 160 (exactly) but rather 159.999999999999. Add
1 to it and you get 160.999999999999 and assign it to a 'long', you
get 160. It's called "imprecise representation of a decimal value"
and essentially all computers with binary FP units suffer from it.
To calculate those things "correctly", add 1.0000001 instead of 1:
long nbNiveau = (yhi-ylo)/stepY + 1.0000001;
It's not pretty, but it will work better. The number of zeros after
the decimal point depends on your 'yhi-ylo' scale.
?
It is possible that you're encountering rounding (truncation in
case of integer division) and adding 1 doesn't do what you need
it to do.
ContNonOrd = new ElemTabCont [nbNiveau];
.....
}
i don't know why,nbNiveau is equal to (yhi-ylo)/stepY, it didn't
+1????and even if i put:
ContNonOrd = new ElemTabCont [nbNiveau+1]; the size of ContNonOrd =
nbNiveau????
That last statement is beyond me. What do you mean by "the size of
ContNotOrd"? How the hell can you know the size? How can it be
different from the size you requested?
i just verify in watch window ContNotOrd[160].
I don't know how you do that, but tell me, if you do
int main() {
long nbNiveau = 160;
char *ContNotOrd = new char[nbNiveau + 1];
}
and "verify in watch window", do you get 160 or 161 _elements_? Do
not tell me the last index (it is less by 1 than the size, right?)
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask