작업을 위해 PHP를 사용하여 0~1개의 임의의 소수를 생성해야 하기 때문에 이전에 mt_rand() 및 mt_getrandmax()를 기반으로 구현된 "0~1개의 임의의 소수를 생성하는 PHP 방법"이라는 기사를 썼습니다. .
나중에 일부 네티즌들은 PHP 기본 메서드 lcg_value()가 0에서 1까지 임의의 소수를 생성할 수 있다고 언급했습니다.
float lcg_value ( void )
lcg_value()는 (0, 1) 범위의 의사 난수를 반환합니다. 이 함수는 주기가 2^31 - 85 및 2^31 - 249인 두 개의 합동 생성기를 결합합니다. 이 함수의 주기는 이 두 소수의 곱과 같습니다.
반환: (0, 1) 범위의 의사 난수.
<?phpfor ($i=0; $i<5; $i++){ echo lcg_value().PHP_EOL; }?>
출력:
0.11516515851995 0.064684551575297 0.68275174031189 0.55730746529099 0.70215008878091
mt_rand() 및 mt_getrand를 기준으로 100,000번 실행 max() 알고리즘 실행 중 time
<?php/** * 生成0~1随机小数 * @param Int $min * @param Int $max * @return Float */function randFloat($min=0, $max=1){ return $min + mt_rand()/mt_getrandmax() * ($max-$min); }// 获取microtimefunction get_microtime(){ list($usec, $sec) = explode(' ', microtime()); return (float)$usec + (float)$sec; }// 记录开始时间$starttime = get_microtime();// 执行10万次获取随机小数for($i=0; $i<100000; $i++){ randFloat(); }// 记录结束时间$endtime = get_microtime();// 输出运行时间printf("run time %f ms\r\n", ($endtime-$starttime)*1000);?>
출력: 런타임 266.893148 ms
lcg_value() 100,000회 실행 시간
<?php// 获取microtimefunction get_microtime(){ list($usec, $sec) = explode(' ', microtime()); return (float)$usec + (float)$sec; }// 记录开始时间$starttime = get_microtime();// 执行10万次获取随机小数for($i=0; $i<100000; $i++){ lcg_value(); }// 记录结束时间$endtime = get_microtime();// 输出运行时间printf("run time %f ms\r\n", ($endtime-$starttime)*1000);?>
출력: 런타임 86.178064 ms
실행 시간 비교, 왜냐하면 lcg_value( )는 직접적으로 네이티브 PHP 메서드이고 mt_rand()와 mt_getrandmax()는 두 개의 메서드를 호출하고 계산을 수행해야 하므로 lcg_value()의 실행 시간이 약 3배 더 빠릅니다.
mt_rand() 및 mt_getrandmax() 알고리즘을 기반으로 한 무작위 효과
<?php/** * 生成0~1随机小数 * @param Int $min * @param Int $max * @return Float */function randFloat($min=0, $max=1){ return $min + mt_rand()/mt_getrandmax() * ($max-$min); } header('content-type: image/png');$im = imagecreatetruecolor(512, 512);$color1 = imagecolorallocate($im, 255, 255, 255);$color2 = imagecolorallocate($im, 0, 0, 0);for($y=0; $y<512; $y++){ for($x=0; $x<512; $x++){ $rand = randFloat(); if(round($rand,2)>=0.5){ imagesetpixel($im, $x, $y, $color1); }else{ imagesetpixel($im, $x, $y, $color2); } } } imagepng($im); imagedestroy($im);?>
무작위 효과 다이어그램:
lcg_value() 무작위 효과
<?phpheader('content-type: image/png');$im = imagecreatetruecolor(512, 512);$color1 = imagecolorallocate($im, 255, 255, 255);$color2 = imagecolorallocate($im, 0, 0, 0);for($y=0; $y<512; $y++){ for($x=0; $x<512; $x++){ $rand = lcg_value(); if(round($rand,2)>=0.5){ imagesetpixel($im, $x, $y, $color1); }else{ imagesetpixel($im, $x, $y, $color2); } } } imagepng($im); imagedestroy($im);?>
랜덤 효과 다이어그램: >
이 글에서는 php lcg_value와 mt_rand 사이에서 0~1개의 난수 생성 효과를 비교 설명합니다. 더 많은 관련 내용은 php 중국어 홈페이지를 참고해주세요.
관련 권장사항
PHP를 통해 ID 접두어 형식 지정 클래스를 수행하는 방법
위 내용은 php lcg_value 및 mt_rand가 0에서 1까지 임의의 소수를 생성하는 효과 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!