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 */