Mail Archives: cygwin/2005/02/23/16:08:08
Okay, sorry: the abs() function was defined as a template in the original code
for historical reasons:
template<number>
number abs(number) ... and so forth
Changing to std::fabs() doesn't change anything in the behavior, however.
At least now I know it's probably AMD FPU related.
-Ralf
> > Long doubles are 12 byte = 96 bit = sizeof(long double). No matter
> whether
> > stored in memory or in registers, they should have that length, no?
>
> Oh, that does turn out to be a recent change to gcc. Hmm.
>
> Then again, I can't reproduce the problem here. Maybe that's the AMD
> vs
> Intel difference you were wondering about. I've got a P4; same OS
> version
> as you though, XpSp1. It makes no difference if I have the call to
> gethostname or not, and it makes no difference if I compile with or
> without
> optimisation.
>
> > In the original code, tolerance is set to 1e-19 instead of 5e-16 if
> long
> > doubles are available. In this case, the code calling gethostname()
> goes
> > into an infinite loop.
>
> That code is seriously buggy, isn't it?
>
> const long double tolerance = 5e-16;
> long double p1, p2, p3;
>
> do
> {
> [details omitted]
> }
> while (abs(p1/pp) > tolerance);
> ^^^^^^^^^^^^^^^^^^^^^^
>
> <koff> I really think that ought to have been *f*abs, should it not?
>
> Heh. Why do people always think they can just ignore compiler
> warnings?
>
> cheers,
> DaveK
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -