From: Alicia Carla Longstreet Newsgroups: comp.lang.c,comp.os.msdos.djgpp Subject: Re: having trouble with long numbers Date: Wed, 30 Jul 1997 20:07:37 -0400 Organization: The Computer Solution Lines: 109 Message-ID: <33DFD749.2AD2@ici.net> References: <01bc9c51$0ceeec80$78ed1fcc AT darkstar> <01bc9c58$5796ffa0$b361e426 AT DCorbit DOT solutionsiq DOT com> Reply-To: carla AT ici DOT net NNTP-Posting-Host: d-ma-fallriver-65.ici.net Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk Dann Corbit wrote: > > The main difficulty with your program is your choice of data types. To > accomplish the same algorithm, I would do something more like this: > > #include > #include > > int main() > { > double daysperyear, > daystotal, > secondsperday, > years, > totalseconds; > char string[256]; > > daysperyear = 365.25; > secondsperday = 86400; > > printf("My second handmade program!\n\nTo tell you the number of > seconds (estimate) you have lived.\n\n"); > printf("Enter your age in years: "); > fgets(string, sizeof string, stdin); > years = atof(string); > daystotal = (daysperyear * years); > printf("Total days = %g\n\n", daystotal); > > totalseconds = (daystotal * secondsperday); > printf("The total number of seconds is: %.0f\n", totalseconds); > > return 0; > } > The thing I don't like about this program is that the number of significant > digits is still very small. > Perhaps, it would be better to collect the date parts separately. Here is > another way to create your program: > 1. Ask the year in which the person was born > 2. Ask the month in which the person was born > 3. Ask the day in which the person was born > 4. Ask the hour in which the person was born {default 0 in case they do not > know} > 5. Ask the minute in which the person was born {default 0 in case they do > not know} > 6. Ask the second in which the person was born {default 0 in case they do > not know} This is pointless, I do not know of ANYPLACE where the second of birth is recorded. > 7. Ask which time zone they were born in. A list would be helpful. > 8. Get the system time, adjusted for time zone > 9. Find the difference in the dates > 10. Calculate the life span in seconds. > 11. Display result to the user. > > Can't decide which variable to use with which scanf code. > > > > I want to be able to have more than 10 digits print out (if the age were > > 10,000 years for example). > > I am new to C (and programming in general) and teaching myself, so any > > criticism will be appreciated. > > #include > > int main() > > { > > int daysper, daystotal, secondsperday, years; > > long long totalseconds; > long long is not portable > > daysper = 365; > There are approximately 365.25 days per year. Over 40 years or so, it can > make quite a difference. It is a bit closer to 365.246 (Which is why we do NOT have a leap year on years that are divisable by 400. > > secondsperday = 86400; > On some machines, this will be too large to store in an integer. True, any machine that defines an int to be a 16 bit short int. > > printf("My second handmade program!\n\nTo tell you the number of seconds > > (estimate) you have lived.\n\n"); > > printf("Enter your age in years: "); > > scanf("%d", &years); > > daystotal=(daysper * years); > > printf("Total days = %d\n\n", daystotal); > > totalseconds=(daystotal * secondsperday); > > printf("The total number of seconds is: %i\n",totalseconds); > I suspect that %i is not the correct format specifier for long long on your > machine. Even with the correct specifier, because the resolution is only > years, there is a false impression in the number of significant digits. > > return 0; > > } -- ********************************************************* * Alicia Carla Longstreet carla AT ici DOT net * * Supporter of the campaign against grumpiness on c.l.c * ********************************************************* It used to be: Spare the rod and spoil the child. Today it's: Spare the rod to stay out of jail.