Mercurial > hg > xemacs-beta
comparison src/floatfns.c @ 434:9d177e8d4150 r21-2-25
Import from CVS: tag r21-2-25
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:30:53 +0200 |
parents | a5df635868b2 |
children | 8de8e3f6228a |
comparison
equal
deleted
inserted
replaced
433:892ca416f0fb | 434:9d177e8d4150 |
---|---|
703 (arg)) | 703 (arg)) |
704 { | 704 { |
705 double f = extract_float (arg); | 705 double f = extract_float (arg); |
706 | 706 |
707 if (f == 0.0) | 707 if (f == 0.0) |
708 return make_int (- (int)((((EMACS_UINT) 1) << (VALBITS - 1)))); /* most-negative-fixnum */ | 708 return make_int (- (EMACS_INT)(((EMACS_UINT) 1) << (VALBITS - 1))); /* most-negative-fixnum */ |
709 #ifdef HAVE_LOGB | 709 #ifdef HAVE_LOGB |
710 { | 710 { |
711 Lisp_Object val; | 711 Lisp_Object val; |
712 IN_FLOAT (val = make_int ((int) logb (f)), "logb", arg); | 712 IN_FLOAT (val = make_int ((EMACS_INT) logb (f)), "logb", arg); |
713 return (val); | 713 return val; |
714 } | 714 } |
715 #else | 715 #else |
716 #ifdef HAVE_FREXP | 716 #ifdef HAVE_FREXP |
717 { | 717 { |
718 int exqp; | 718 int exqp; |
719 IN_FLOAT (frexp (f, &exqp), "logb", arg); | 719 IN_FLOAT (frexp (f, &exqp), "logb", arg); |
720 return (make_int (exqp - 1)); | 720 return make_int (exqp - 1); |
721 } | 721 } |
722 #else | 722 #else |
723 { | 723 { |
724 int i; | 724 int i; |
725 double d; | 725 double d; |
739 for (i = 1, d = 2.0; d * d <= f; i += i) | 739 for (i = 1, d = 2.0; d * d <= f; i += i) |
740 d *= d; | 740 d *= d; |
741 f /= d; | 741 f /= d; |
742 val += i; | 742 val += i; |
743 } | 743 } |
744 return (make_int (val)); | 744 return make_int (val); |
745 } | 745 } |
746 #endif /* ! HAVE_FREXP */ | 746 #endif /* ! HAVE_FREXP */ |
747 #endif /* ! HAVE_LOGB */ | 747 #endif /* ! HAVE_LOGB */ |
748 } | 748 } |
749 #endif /* LISP_FLOAT_TYPE */ | 749 #endif /* LISP_FLOAT_TYPE */ |