[前][次][番号順一覧][スレッド一覧]

ruby-changes:45666

From: nobu <ko1@a...>
Date: Tue, 28 Feb 2017 10:10:43 +0900 (JST)
Subject: [ruby-changes:45666] nobu:r57739 (trunk): numeric.c: suppress warning

nobu	2017-02-28 10:10:38 +0900 (Tue, 28 Feb 2017)

  New Revision: 57739

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=57739

  Log:
    numeric.c: suppress warning
    
    * numeric.c (DEFINE_INT_SQRT): suppress a type-limits warning
      where int is always smaller than double.

  Modified files:
    trunk/numeric.c
Index: numeric.c
===================================================================
--- numeric.c	(revision 57738)
+++ numeric.c	(revision 57739)
@@ -5132,8 +5132,7 @@ int_truncate(int argc, VALUE* argv, VALU https://github.com/ruby/ruby/blob/trunk/numeric.c#L5132
 rettype \
 prefix##_isqrt(argtype n) \
 { \
-    if (sizeof(n) * CHAR_BIT > DBL_MANT_DIG && \
-	n >= ((argtype)1UL << DBL_MANT_DIG)) { \
+    if (!argtype##_IN_DOUBLE_P(n)) { \
 	unsigned int b = bit_length(n); \
 	argtype t; \
 	rettype x = (rettype)(n >> (b/2+1)); \
@@ -5144,8 +5143,20 @@ prefix##_isqrt(argtype n) \ https://github.com/ruby/ruby/blob/trunk/numeric.c#L5143
     return (rettype)sqrt((double)n); \
 }
 
-DEFINE_INT_SQRT(unsigned long, rb_ulong, unsigned long)
-#if SIZEOF_BDIGIT*2 > SIZEOF_LONG
+#if SIZEOF_LONG*CHAR_BIT > DBL_MANT_DIG
+# define RB_ULONG_IN_DOUBLE_P(n) ((n) < (1UL << DBL_MANT_DIG))
+#else
+# define RB_ULONG_IN_DOUBLE_P(n) 1
+#endif
+#define RB_ULONG unsigned long
+DEFINE_INT_SQRT(unsigned long, rb_ulong, RB_ULONG)
+
+#if 2*SIZEOF_BDIGIT > SIZEOF_LONG
+# if 2*SIZEOF_BDIGIT*CHAR_BIT > DBL_MANT_DIG
+#   define BDIGIT_DBL_IN_DOUBLE_P(n) ((n) < ((BDIGIT_DBL)1UL << DBL_MANT_DIG))
+# else
+#   define BDIGIT_DBL_IN_DOUBLE_P(n) 1
+# endif
 DEFINE_INT_SQRT(BDIGIT, rb_bdigit_dbl, BDIGIT_DBL)
 #endif
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]