Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.anu.edu.au!harbinger.cc.monash.edu.au!news.rmit.EDU.AU!news.unimelb.EDU.AU!munnari.OZ.AU!news.ecn.uoknor.edu!news.cis.okstate.edu!newsfeed.ksu.ksu.edu!news.physics.uiowa.edu!math.ohio-state.edu!howland.reston.ans.net!usc!news.cerf.net!nntp-server.caltech.edu!bombay.gps.caltech.edu!STAN From: stan@bombay.gps.caltech.edu ("Stan") Newsgroups: comp.unix.bsd.freebsd.misc Subject: Weird arithmetic Date: 28 Apr 1996 18:19:06 GMT Organization: USGS Lines: 50 Message-ID: <4m0cqq$bv0@gap.cco.caltech.edu> Reply-To: stan@bombay.gps.caltech.edu NNTP-Posting-Host: bombay.gps.caltech.edu I downloaded a copy of a program called ephem to figure out astronomical stuff, and it's doing something that I really don't understand at all. N.B. All variables in the routine in questions are declared double. It's blowing up in the math library inside the sin function. I compiled with gdb and found this: There is a variable called ms: (gdb) print ms $2 = 1.4101357041089591 This looks reasonable. Taking sin(ms) worked all right, but when we try to take sin(2*ms), all hell breaks loose. I tried isolating the problem by adding a line: x1 = 2*ms; (gdb) print x1 $1 = -1.8800393335575473e+230 Note that I get an overflow. Yet: (gdb) print 2*ms $3 = 2.8202714082179181 I can calculate 2*ms from gdb, yet it turns into overflow when the program does it. I thought that the difference between 2*ms and 2.0*ms might be it, so I tried it: x1 = 2.0 * ms; (gdb) print x1 $1 = 8.275783586691418e-313 Now I get an underflow and the sin function still chokes. I suspect that there is something very fundamental that I'm missing here. Anybody know what it is? -- ------------------------------------------------------------------------------- Stan Schwarz | "I just want to live like Yogi Bear stan@bombay.gps.caltech.edu | He kicks ass on the average bear." ---------------------------------------------------- -Stukas Over Bedrock -----