On Oct 3, 2006, at 8:30 AM, Martin v. Löwis wrote:
> As Michael Hudson observed, this is difficult to implement, though:
> You can't distinguish between -0.0 and +0.0 easily, yet you should.

Of course you can. It's absolutely trivial. The only part that's even  
*the least bit* sketchy in this is assuming that a double is 64 bits.  
Practically speaking, that is true on all architectures I know of,  
and if it's not guaranteed, it could easily be a 'configure' time check.

typedef union {
     double d;
     uint64_t i;
} rawdouble;

int isposzero(double a) {
     rawdouble zero;
     zero.d = 0.0;
     rawdouble aa;
     aa.d = a;
     return aa.i == zero.i;
}

int main() {
     if (sizeof(double) != sizeof(uint64_t))
         return 1;

     printf("%d\n", isposzero(0.0));
     printf("%d\n", isposzero(-0.0));

}

James
_______________________________________________
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

Reply via email to