2017-12-22 22 views
1

Oracle Database 12c를 사용하고 있습니다. 우리가 C++ (urand())에서와 같이 균일하게 분산 된 부동 소수점 숫자를 생성 할 수있는 방법이 있습니까?urand in Oracle Database

또는 그렇게 할 수있는 모든 서브 루틴. DBMS_RANDOM 패키지에는 정규 분포에 대한 기능이 있지만 균일 분포는 아닙니다.

+0

'dbms_random.value'가 아닌가요? –

답변

2

DBMS_RANDOM.VALUE은 균일 한 분포로 값을 생성합니다. the manual 비록

명시 적으로 나는 우리가 균일 한 분포를 사용 확신 할 수 있다고 생각하는 방법을 VALUE RANDOMIZE 번호를 명시하지 않는 이유는 그것을 할 수있는 가장 쉬운 방법은, 그리고 표준화를 제공하는 다른 기능이 이미있다

  1. 분포.
  2. 아래의 빠른 테스트 사례는 숫자가 균일하게 분포되어 있는지 확인합니다. 테스트 코드에 대한

    begin 
        dbms_random.seed(val => 'abcd'); 
    end; 
    /
    

    10 만 개 임의 값을 생성,이를 계산, 반올림과 양동이에 넣어 :

    을 모든 사람의 결과가 일치되도록 시험에

은 씨앗을 설정

--Compare DBMS_RANDOM.NORMAL and DBMS_RANDOM.VALUE. 
select normal_value, normal_count, value_count 
from 
(
    --NORMAL 
    select round(random_value, 1) normal_value, count(*) normal_count 
    from 
    (
     select 
      dbms_random.normal random_value 
     from dual 
     connect by level <= 100000 
    ) 
    group by round(random_value, 1) 
    order by normal_value 
) normal_values 
join 
(
    --VALUE 
    select round(random_value, 1) value_value, count(*) value_count 
    from 
    (
     select 
      dbms_random.value(-3,3) random_value 
     from dual 
     connect by level <= 100000 
    ) 
    group by round(random_value, 1) 
    order by value_value 
) value_values 
on normal_values.normal_value = value_values.value_value 
order by 1; 

내보내기 LibreOffice와의 값을 그리고 당신은 너무 추한 차트를 생성 할 수 있습니다

enter image description here