Path: utzoo!utgpu!watserv1!watmath!att!cbnewsj!veenu From: veenu@cbnewsj.ATT.COM (veenu.r.rashid) Newsgroups: comp.lang.c Subject: Re^2: Help with function Keywords: abs(), strtod(), don't work Message-ID: <3477@cbnewsj.ATT.COM> Date: 18 Jan 90 20:27:08 GMT References: <2385@ektools.UUCP> Reply-To: veenu@cbnewsj.ATT.COM (veenu.r.rashid,mt,) Distribution: na Organization: AT&T Bell Laboratories Lines: 38 In article <2385@ektools.UUCP> randolph@ektools.UUCP (Gary L. Randolph) writes: >In article <3198@cbnewsj.ATT.COM> veenu@cbnewsj.ATT.COM (veenu.r.rashid) writes: >> On the compiler I'm using, abs() and strtol() seem to generate incorrect >>or at least inaccurate results. I'm using the following code: >>main(int argc, char *argv[]) >>{ >> double temp; >> >> temp = strtod(argv[1]); /* get the argument as a double */ >> printf("Absolute value of %g is %g\n", temp, abs(temp)); >>} >>Any code, suggestions, comments greatly appreciated. > Well, I got quite a flurry of messages about the problem above which I posted to the net.. The vast majority of the messages pointed out one obvious flaw: the usage of strtod() takes two args. This is quite right. I used atof(), which takes one argument, in the actual program, but posted strtod(), since I typed in the message on the fly. I apologize for the confusion, but the other part of the responses did help in a major way -- using fabs(). As it turns out, the abs() macro definition tends to return int, (but not always!), while fabs() returns the correct floating point value. Now, is this just a macro characteristic or is it the compiler I'm using. (*Disclaimer* The question is academic in my case!) Thanks very much to all who replied to the original posting :-) ruze att!mtmfi!ruze AT&T Bell Laboratories (201) 957-6684