2012-02-12 24 views
6

PHP trả lại giá trị ngẫu nhiên lớn nhất có thể có 32767 trên các cửa sổ?getrandmax() tại sao 32767 hạn chế trên cửa sổ?

Ràng buộc trên cửa sổ là gì?

echo getrandmax(); //32767 
+2

rand gọi hàm rand hệ thống có ngày trở lại hòm - hoặc ít nhất là khi hầu hết các máy tính mini có độ dài 16 bit. Nếu bạn muốn có một trình tạo số ngẫu nhiên tốt hơn, hãy sử dụng trình tạo số Mersenne Twister: mt_rand(). Đó là mt_getrandmax() là 2^31-1. – TerryE

+1

Hay đúng hơn, đó là hạt giống lớn nhất có thể. Chỉ có 32767 giá trị ngẫu nhiên khác biệt giữa 1 và 250000, hoặc 1 và 1 tỷ, mà là khá ngu ngốc. (Đó là nơi mà Mersenne Twister đi vào!) – Westie

Trả lời

9

Theo PHP mã nguồn, getrandmax() được định nghĩa là:

PHP_FUNCTION(getrandmax) 
{ 
    if (zend_parse_parameters_none() == FAILURE) { 
     return; 
    } 

    RETURN_LONG(PHP_RAND_MAX); 
} 

PHP_RAND_MAX được định nghĩa là:

#define PHP_RAND_MAX RAND_MAX 

RAND_MAX tự được định nghĩa là:

/* System Rand functions */ 
#ifndef RAND_MAX 
#define RAND_MAX (1<<15) 
#endif 

Vì vậy, nếu có một RAND_MAX xác định, nó được sử dụng ...


... Và, trên Windows với Visual Studio, có thực sự là một RAND_MAX định nghĩa (trích dẫn):

Hằng số RAND_MAX là giá trị tối đa có thể được trả về bởi chức năng rand. RAND_MAX được định nghĩa là giá trị 0x7fff.

Vì vậy, về cơ bản, getrandmax() lợi nhuận 32767 vì đó là cách nó được xác định trên Windows - và PHP thường sử dụng những gì mà xuất khẩu hệ thống cơ bản.

+0

đánh bại tôi theo thời gian. Tôi chỉ nhìn vào nguồn –

Các vấn đề liên quan