git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1028 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2000-11-02 09:04:54 +00:00
parent 4b9666b700
commit 58e04b755a
6 changed files with 21 additions and 15 deletions

View File

@ -1,3 +1,8 @@
Thu Nov 2 18:01:16 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
* random.c (rb_f_rand): half-baked float support fixed. This fix
was originally proposed by K.Kosako <kosako@sofnec.co.jp>.
Tue Oct 31 17:27:17 2000 Yukihiro Matsumoto <matz@ruby-lang.org> Tue Oct 31 17:27:17 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
* bignum.c: change digit size to `long|int' if long long is * bignum.c: change digit size to `long|int' if long long is

View File

@ -20,14 +20,14 @@ VALUE rb_cBignum;
#define USHORT _USHORT #define USHORT _USHORT
#endif #endif
#if SIZEOF_LONG*2 <= SIZEOF_LONG_LONG #if SIZEOF_INT*2 <= SIZEOF_LONG_LONG
typedef unsigned long BDIGIT;
typedef unsigned long long BDIGIT_DBL;
typedef long long BDIGIT_DBL_SIGNED;
#elif SIZEOF_INT*2 <= SIZEOF_LONG_LONG
typedef unsigned int BDIGIT; typedef unsigned int BDIGIT;
typedef unsigned long long BDIGIT_DBL; typedef unsigned long long BDIGIT_DBL;
typedef long long BDIGIT_DBL_SIGNED; typedef long long BDIGIT_DBL_SIGNED;
#elif SIZEOF_INT*2 <= SIZEOF___INT64
typedef unsigned int BDIGIT;
typedef unsigned __int64 BDIGIT_DBL;
typedef __int64 BDIGIT_DBL_SIGNED;
#else #else
typedef unsigned short BDIGIT; typedef unsigned short BDIGIT;
typedef unsigned long BDIGIT_DBL; typedef unsigned long BDIGIT_DBL;
@ -469,7 +469,7 @@ dbl2big(d)
double d; double d;
{ {
long i = 0; long i = 0;
long c; BDIGIT c;
BDIGIT *digits; BDIGIT *digits;
VALUE z; VALUE z;
double u = (d < 0)?-d:d; double u = (d < 0)?-d:d;
@ -489,9 +489,9 @@ dbl2big(d)
digits = BDIGITS(z); digits = BDIGITS(z);
while (i--) { while (i--) {
u *= BIGRAD; u *= BIGRAD;
c = (long)u; c = (BDIGIT)u;
u -= c; u -= c;
digits[i] = (BDIGIT)c; digits[i] = c;
} }
return z; return z;

View File

@ -113,6 +113,7 @@ AC_CHECK_SIZEOF(int, 4)
AC_CHECK_SIZEOF(short, 2) AC_CHECK_SIZEOF(short, 2)
AC_CHECK_SIZEOF(long, 4) AC_CHECK_SIZEOF(long, 4)
AC_CHECK_SIZEOF(long long, 0) AC_CHECK_SIZEOF(long long, 0)
AC_CHECK_SIZEOF(__int64, 0)
AC_CHECK_SIZEOF(void*, 4) AC_CHECK_SIZEOF(void*, 4)
AC_CHECK_SIZEOF(float, 4) AC_CHECK_SIZEOF(float, 4)
AC_CHECK_SIZEOF(double, 8) AC_CHECK_SIZEOF(double, 8)

View File

@ -18,10 +18,7 @@
double strtod(); double strtod();
#endif #endif
#if SIZEOF_LONG*2 <= SIZEOF_LONG_LONG #if SIZEOF_INT*2 <= SIZEOF_LONG_LONG || SIZEOF_INT*2 <= SIZEOF___INT64
typedef unsigned long BDIGIT;
#define SIZEOF_BDIGITS SIZEOF_LONG
#elif SIZEOF_INT*2 <= SIZEOF_LONG_LONG
typedef unsigned int BDIGIT; typedef unsigned int BDIGIT;
#define SIZEOF_BDIGITS SIZEOF_INT #define SIZEOF_BDIGITS SIZEOF_INT
#else #else

View File

@ -147,8 +147,11 @@ rb_f_rand(argc, argv, obj)
} }
switch (TYPE(vmax)) { switch (TYPE(vmax)) {
case T_FLOAT: case T_FLOAT:
if (RFLOAT(vmax)->value <= LONG_MAX && RFLOAT(vmax)->value >= LONG_MIN) if (RFLOAT(vmax)->value <= LONG_MAX && RFLOAT(vmax)->value >= LONG_MIN) {
max = (long)RFLOAT(vmax)->value;
break; break;
}
vmax = rb_dbl2big(RFLOAT(vmax)->value);
/* fall through */ /* fall through */
case T_BIGNUM: case T_BIGNUM:
return rb_big_rand(vmax, RANDOM_NUMBER); return rb_big_rand(vmax, RANDOM_NUMBER);

View File

@ -1,4 +1,4 @@
#define RUBY_VERSION "1.6.2" #define RUBY_VERSION "1.6.2"
#define RUBY_RELEASE_DATE "2000-11-01" #define RUBY_RELEASE_DATE "2000-11-02"
#define RUBY_VERSION_CODE 162 #define RUBY_VERSION_CODE 162
#define RUBY_RELEASE_CODE 20001101 #define RUBY_RELEASE_CODE 20001102