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
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
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);
}
Và 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ăngrand
.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.
đánh bại tôi theo thời gian. Tôi chỉ nhìn vào nguồn –
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
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