我正在使用 Oracle 数据库 12c。有没有办法像我们在 C++ (urand()) 中那样生成均匀分布的浮点数?
或任何可以这样做的子程序。DBMS_RANDOM 包具有正态分布但不具有均匀分布的功能
我正在使用 Oracle 数据库 12c。有没有办法像我们在 C++ (urand()) 中那样生成均匀分布的浮点数?
或任何可以这样做的子程序。DBMS_RANDOM 包具有正态分布但不具有均匀分布的功能
DBMS_RANDOM.VALUE
生成均匀分布的值。
虽然手册没有明确说明如何VALUE
随机化数字,但我认为我们可以确信它使用均匀分布,因为:
对于测试,设置一个种子,以便每个人的结果都匹配:
begin
dbms_random.seed(val => 'abcd');
end;
/
对于测试代码,生成 100,000 个随机值,对它们进行计数,然后将它们放入四舍五入的桶中:
--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,然后您也可以生成这个丑陋的图表: