00001 #include <limits.h> 00002 #include "ruby.h" 00003 00004 int 00005 signbit(double x) 00006 { 00007 enum {double_per_long = sizeof(double) / sizeof(long)}; 00008 enum {long_msb = sizeof(long) * CHAR_BIT - 1}; 00009 union {double d; unsigned long i[double_per_long];} u; 00010 unsigned long l; 00011 00012 u.d = x; 00013 #ifdef WORDS_BIGENDIAN 00014 l = u.i[0]; 00015 #else 00016 l = u.i[double_per_long - 1]; 00017 #endif 00018 return (int)(l >> long_msb); 00019 } 00020