RosettaCodeData/Task/Monte-Carlo-methods/DuckDB/monte-carlo-methods.duckdb
2025-08-11 18:05:26 -07:00

20 lines
562 B
Text

create or replace function mcPi(n) as (
with recursive cte as (
select -1 as i, 0 as count, NULL::DOUBLE as x, NULL::DOUBLE as y
union all
select i+1 as i,
count + if( x*x + y*y <= 1, 1, 0) as count,
random() as x,
random() as y
from cte
where i < n
)
select last( 4 * count / n order by i)
from cte
);
# Examples:
select n, mcPi, format('{:.5f}', (mcPi - pi()) / pi()) as "relative error"
from (select n, mcPi(n) as mcPi
from (select unnest([100, 1000, 10000, 100000, 200000]) as n));