On 4 Oct 2006, at 02:38, Josiah Carlson wrote: > Alastair Houghton <[EMAIL PROTECTED]> wrote: > > There is, of course, the option of examining their representations in > memory (I described the general technique in another posting on this > thread). From what I understand of IEEE 764 FP doubles, -0.0 and +0.0 > have different representations, and if we look at the underlying > representation (perhaps by a "*((uint64*)(&float_input))"), we can > easily distinguish all values we want to cache...
Yes, though a trip via memory isn't necessarily cheap, and you're also assuming that the machine doesn't use an FP representation with multiple +0s or -0s. Perhaps they should be different anyway though, I suppose. > And as I stated before, we can switch on those values. Alternatively, > if we can't switch on the 64 bit values directly... > > uint32* p = (uint32*)(&double_input) > if (!p[0]) { /* p[1] on big-endian platforms */ > switch p[1] { /* p[0] on big-endian platforms */ > ... > } > } That's worse, IMHO, because it assumes more about the representation. If you're going to look directly at the binary, I think all you can reasonably do is a straight binary comparison. I don't think you should poke at the bits without first knowing that the platform uses IEEE floating point. The reason I suggested 1.0/x is that it's one of the few ways (maybe the only way?) to distinguish -0.0 and +0.0 using arithmetic, which is what people that care about the difference between the two are going to care about. Kind regards, Alastair. -- http://alastairs-place.net _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com