- **C Programming**
(*http://www.velocityreviews.com/forums/f42-c-programming.html*)

- - **Negative "not taking"**
(*http://www.velocityreviews.com/forums/t550315-negative-not-taking.html*)

Negative "not taking"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++; } while (isadigit(*s)){ d=d*10.00 + ('0' - *s++); } if (*s == '.'){ s++; while(isadigit(*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 |

Re: Negative "not taking"mdh <mdeh@comcast.net> 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 |

Re: Negative "not taking"On Nov 8, 9:46 am, mdh <m...@comcast.net> 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++; > } > > while (isadigit(*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++; > while(isadigit(*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 |

Re: Negative "not taking"On Nov 8, 7:00 am, Lew Pitcher <lpitc...@teksavvy.com> wrote:
> On Nov 8, 9:46 am, mdh <m...@comcast.net> 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 |

Re: Negative "not taking"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) |

Re: Negative "not taking"Mark Bluemel <mark_bluemel@pobox.com> 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". |

Re: Negative "not taking"Ben Pfaff wrote:
> mdh <mdeh@comcast.net> 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> Try the download section. -- Posted via a free Usenet account from http://www.teranews.com |

All times are GMT. The time now is 06:44 AM. |

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.

SEO by vBSEO ©2010, Crawlability, Inc.