Velocity Reviews > Negative "not taking"

# Negative "not taking"

mdh
Guest
Posts: n/a

 11-08-2007
Hi All,
I understand atof is in the library, but this is part of my learning
curve.

Given

double atof( char *s){
double d = 0.00;
double sign = 1.00;
double fractprt = 1.00;
/* check for neg number */
if ( *s == '-') {
sign = -1.00;
s++;
}

d=d*10.00 + ('0' - *s++);
}
if (*s == '.'){
s++;
d=d*10.00 + ('0' - *s++);
fractprt *=10;
}
}
return (sign * d / fractprt) ;
}

where s[] equals -36.03, the return I get is 36.03 not -36.03. Is
there a reason why
"return (sign * d / fractprt) ;"

does not seem to multiply by "-1"

Thanks

Ben Pfaff
Guest
Posts: n/a

 11-08-2007
mdh <(E-Mail Removed)> writes:

> d=d*10.00 + ('0' - *s++);

I think you mean *s++ - '0'.

> d=d*10.00 + ('0' - *s++);

Ditto.

> there a reason why
> "return (sign * d / fractprt) ;"
>
> does not seem to multiply by "-1"

Because you get the sign of each digit wrong.
--
Ben Pfaff
http://benpfaff.org

Lew Pitcher
Guest
Posts: n/a

 11-08-2007
On Nov 8, 9:46 am, mdh <(E-Mail Removed)> wrote:
> Hi All,
> I understand atof is in the library, but this is part of my learning
> curve.
>
> Given
>
> double atof( char *s){
> double d = 0.00;
> double sign = 1.00;
> double fractprt = 1.00;
> /* check for neg number */
> if ( *s == '-') {
> sign = -1.00;
> s++;
> }
>
> d=d*10.00 + ('0' - *s++);

Consider this: what is the result of ('0' - '3') ?
Hint: it isn't what you think it is.

> }
> if (*s == '.'){
> s++;
> d=d*10.00 + ('0' - *s++);

Again, what is the result of ('0' - '3')?

> fractprt *=10;
> }
> }
> return (sign * d / fractprt) ;
>
> }
>
> where s[] equals -36.03, the return I get is 36.03 not -36.03. Is
> there a reason why
> "return (sign * d / fractprt) ;"
>
> does not seem to multiply by "-1"

Think of it this way: what sort of number will give you a positive
value when multiplied by -1?
Thats the sort of number that (d/fractprt) represents.
So, how did you get that sort of number? What part of your function is
suspect? What part(s) produce signed values, where the sign can be
suspect?

> Thanks

mdh
Guest
Posts: n/a

 11-08-2007
On Nov 8, 7:00 am, Lew Pitcher <(E-Mail Removed)> wrote:
> On Nov 8, 9:46 am, mdh <(E-Mail Removed)> wrote:
>
> Think of it this way: what sort of number will give you a positive
> value when multiplied by -1?
>
>
> > Thanks

It was a long day!!! Sometimes I think one gets so caught up in the
"progamming" aspect..esp when learning that one overlooks something
really basic.
thank you

Mark Bluemel
Guest
Posts: n/a

 11-08-2007
mdh wrote:
> Hi All,
> I understand atof is in the library, but this is part of my learning
> curve.
>
> Given
>
> double atof( char *s){

....
> d=d*10.00 + ('0' - *s++);

....

> d=d*10.00 + ('0' - *s++);

> where s[] equals -36.03, the return I get is 36.03 not -36.03.

Deja Vu all over again. Your name isn't Leonard Shelby by any chance?
(http://tinyurl.com/347zrf)

Richard
Guest
Posts: n/a

 11-08-2007
Mark Bluemel <(E-Mail Removed)> writes:

> mdh wrote:
>> Hi All,
>> I understand atof is in the library, but this is part of my learning
>> curve.
>>
>> Given
>>
>> double atof( char *s){

> ...
>> d=d*10.00 + ('0' - *s++);

> ...
>
>> d=d*10.00 + ('0' - *s++);

>
>> where s[] equals -36.03, the return I get is 36.03 not -36.03.

>
> Deja Vu all over again. Your name isn't Leonard Shelby by any chance?
> (http://tinyurl.com/347zrf)

99.9999% of questions asked here are deja vu. It's a help group I
thought? my advice to you is to take a break if you are scoffing at the
"usual mistakes".

CBFalconer
Guest
Posts: n/a

 11-08-2007
Ben Pfaff wrote:
> mdh <(E-Mail Removed)> writes:
>
>> d=d*10.00 + ('0' - *s++);

>
> I think you mean *s++ - '0'.
>
>> d=d*10.00 + ('0' - *s++);

>
> Ditto.

How about "- ('0' - *s++)" in both expressions?

--
Chuck F (cbfalconer at maineline dot net)
<http://cbfalconer.home.att.net>

--
Posted via a free Usenet account from http://www.teranews.com