From simon.urbanek at r-project.org  Wed Jun  1 19:01:55 2005
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Wed Jun  1 19:02:11 2005
Subject: [Rd] 1/tan(-0) != 1/tan(0)
In-Reply-To: <XFMail.050601105014.Ted.Harding@nessie.mcc.ac.uk>
References: <XFMail.050601105014.Ted.Harding@nessie.mcc.ac.uk>
Message-ID: <5F845940-4389-4E68-8EE9-0F45094A8E11@r-project.org>

On Jun 1, 2005, at 5:50 AM, (Ted Harding) wrote:

> However, a query: Clearly from the above (ahich I can reproduce  
> too), tan() can distinguish between -0 and +0, and return different  
> results (otherwise 1/tan() would not return different results).
>
> But how can the user tell the difference between +0 amnd -0?

That's indeed a good question - by definition (-0)==(+0) is true,  
-0<0 is false and signum of both -0 and 0 is 0.

I don't see an obvious way of distinguishing them at R level. Besides  
computational ways (like the 1/tan trick) the only (very ugly) way  
coming to my mind is something like:
a==0 && substr(sprintf("%f",a),1,1)=="-"
Note that print doesn't display the sign, only printf does.

At C level it's better - you can use the signbit() function/macro  
there. Any other ideas?

Cheers,
Simon


[Rd] 1/tan(-0) != 1/tan(0)
Simon Urbanek