summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-11-02 09:04:54 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-11-02 09:04:54 +0000
commit58e04b755a862f9dde91b0293f1998ed26ab73f4 (patch)
treee60ccc755d2807e75147e97eddf4304075777b3f
parent4b9666b700e57c11a4443c3c2819a3c127ce93a6 (diff)
matz
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1028 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--bignum.c16
-rw-r--r--configure.in1
-rw-r--r--marshal.c5
-rw-r--r--random.c5
-rw-r--r--version.h4
6 files changed, 21 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 21a1252f27..db1d8ae2c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
* bignum.c: change digit size to `long|int' if long long is
diff --git a/bignum.c b/bignum.c
index 1494db6a8f..e7f84dc6f9 100644
--- a/bignum.c
+++ b/bignum.c
@@ -20,14 +20,14 @@ VALUE rb_cBignum;
#define USHORT _USHORT
#endif
-#if SIZEOF_LONG*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
+#if SIZEOF_INT*2 <= SIZEOF_LONG_LONG
typedef unsigned int BDIGIT;
typedef unsigned long long BDIGIT_DBL;
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
typedef unsigned short BDIGIT;
typedef unsigned long BDIGIT_DBL;
@@ -469,7 +469,7 @@ dbl2big(d)
double d;
{
long i = 0;
- long c;
+ BDIGIT c;
BDIGIT *digits;
VALUE z;
double u = (d < 0)?-d:d;
@@ -489,9 +489,9 @@ dbl2big(d)
digits = BDIGITS(z);
while (i--) {
u *= BIGRAD;
- c = (long)u;
+ c = (BDIGIT)u;
u -= c;
- digits[i] = (BDIGIT)c;
+ digits[i] = c;
}
return z;
diff --git a/configure.in b/configure.in
index a87e098e43..fac0265e95 100644
--- a/configure.in
+++ b/configure.in
@@ -113,6 +113,7 @@ AC_CHECK_SIZEOF(int, 4)
AC_CHECK_SIZEOF(short, 2)
AC_CHECK_SIZEOF(long, 4)
AC_CHECK_SIZEOF(long long, 0)
+AC_CHECK_SIZEOF(__int64, 0)
AC_CHECK_SIZEOF(void*, 4)
AC_CHECK_SIZEOF(float, 4)
AC_CHECK_SIZEOF(double, 8)
diff --git a/marshal.c b/marshal.c
index 7ae88485a8..cc1d820754 100644
--- a/marshal.c
+++ b/marshal.c
@@ -18,10 +18,7 @@
double strtod();
#endif
-#if SIZEOF_LONG*2 <= SIZEOF_LONG_LONG
-typedef unsigned long BDIGIT;
-#define SIZEOF_BDIGITS SIZEOF_LONG
-#elif SIZEOF_INT*2 <= SIZEOF_LONG_LONG
+#if SIZEOF_INT*2 <= SIZEOF_LONG_LONG || SIZEOF_INT*2 <= SIZEOF___INT64
typedef unsigned int BDIGIT;
#define SIZEOF_BDIGITS SIZEOF_INT
#else
diff --git a/random.c b/random.c
index 02908734f5..028820d861 100644
--- a/random.c
+++ b/random.c
@@ -147,8 +147,11 @@ rb_f_rand(argc, argv, obj)
}
switch (TYPE(vmax)) {
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;
+ }
+ vmax = rb_dbl2big(RFLOAT(vmax)->value);
/* fall through */
case T_BIGNUM:
return rb_big_rand(vmax, RANDOM_NUMBER);
diff --git a/version.h b/version.h
index 74cb2daac5..589bb234d0 100644
--- a/version.h
+++ b/version.h
@@ -1,4 +1,4 @@
#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_RELEASE_CODE 20001101
+#define RUBY_RELEASE_CODE 20001102