From 0056591f50502c58616f3ea5249e92a174ab86c6 Mon Sep 17 00:00:00 2001 From: akr Date: Sat, 8 Jun 2013 06:00:04 +0000 Subject: * internal.h (INTEGER_PACK_FORCE_BIGNUM): New flag constant. * bignum.c (rb_integer_unpack): Support INTEGER_PACK_FORCE_BIGNUM. * random.c (int_pair_to_real_inclusive): Use INTEGER_PACK_FORCE_BIGNUM to use rb_big_mul instead of rb_funcall. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41165 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- random.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'random.c') diff --git a/random.c b/random.c index bfb961019c..b9869f9b11 100644 --- a/random.c +++ b/random.c @@ -285,15 +285,17 @@ int_pair_to_real_inclusive(uint32_t a, uint32_t b) xary[0] = a; xary[1] = b; x = rb_integer_unpack(+1, xary, 2, sizeof(uint32_t), 0, - INTEGER_PACK_MSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER); + INTEGER_PACK_MSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER| + INTEGER_PACK_FORCE_BIGNUM); /* (1 << 53) | 1 */ mary[0] = 0x00200000; mary[1] = 0x00000001; m = rb_integer_unpack(+1, mary, 2, sizeof(uint32_t), 0, - INTEGER_PACK_MSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER); + INTEGER_PACK_MSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER| + INTEGER_PACK_FORCE_BIGNUM); - x = rb_funcall(x, '*', 1, m); + x = rb_big_mul(x, m); if (FIXNUM_P(x)) { #if CHAR_BIT * SIZEOF_LONG > 64 r = (double)(FIX2ULONG(x) >> 64); -- cgit v1.2.3