identical(0, -0)
Martin Maechler wrote:
William Dunlap <wdunlap at tibco.com>
on Thu, 6 Aug 2009 15:06:08 -0700 writes:
>> -----Original Message----- From:
>> r-help-bounces at r-project.org
>> [mailto:r-help-bounces at r-project.org] On Behalf Of
>> Giovanni Petris Sent: Thursday, August 06, 2009 3:00 PM
>> To: milton.ruser at gmail.com Cc: r-help at r-project.org;
>> Daniel.Gerlanc at geodecapital.com Subject: Re: [R] Why is 0
>> not an integer?
>>
>>
>> I ran an instant experiment...
>>
>> > typeof(0) [1] "double" > typeof(-0) [1] "double" >
>> identical(0, -0) [1] TRUE
>>
>> Best, Giovanni
> But 0.0 and -0.0 have different reciprocals
>> 1.0/0.0
> [1] Inf
>> 1.0/-0.0
> [1] -Inf
> Bill Dunlap TIBCO Software Inc - Spotfire Division wdunlap
> tibco.com
yes. {finally something interesting in this boring thread !}
---> diverting to R-devel
In April, I've had a private e-mail communication with John
Chambers [father of S, notably S4, which also brought identical()]
and Bill about the topic,
where I had started suggesting that R should be changed such
that
identical(-0. , +0.)
would return FALSE.
Bill did mention that it does so for (newish versions of) S+
and that he'd prefer that, too,
and John said
>> I agree on having a preference for a bitwise comparison for >> identical()---that's what the name means after all. But since >> someone implemented the numerical case as the C == it's probably >> going to be more hassle than it's worth to change it. But we >> should make the implementation clear in the documentation.
so in principle, we all agreed that R's identical() should be changed here, namely by using something like memcmp() instead of simple '==' , however we haven't bothered to actually *implement* this change. I am currently testing a patch which would lead to identical(0, -0) return FALSE.
I don't think that would be a good idea. Other expressions besides "-0" calculate the zero with the negative sign bit, e.g. the following sequence: pos <- 1 neg <- -1 zero <- 0 y <- zero*pos z <- zero*neg identical(y, z) I think most R users would expect the last expression there to be TRUE based on the previous two lines, given that pos and neg both have finite values. In a simple case like this y == z would be a better test to use, but if those were components of a larger structure, identical() is all we've got, and people would waste a lot of time tracking down why structures differing only in the sign of zero were not identical, even though every element tested equal. Duncan Murdoch
Martin Maechler, ETH Zurich
>> > By the way:
>> >
>> > Are there difference between -0 and 0?
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel