LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
stdlib_random.c
浏览该文件的文档.
1#include "lmmc/stdlib.h"
2
3#include "lmmc/random.h"
4
5#include "stdlib_internal.h"
6
8{
9 if (!rng) { return LMMC_STATUS_INVALID_ARGUMENT; }
10 return lmmc_rng_seed(rng, seed);
11}
12
14{
15 lmmc_real_t value;
16 lmmc_status_t status;
17 if (!rng || !out) { return LMMC_STATUS_INVALID_ARGUMENT; }
18 status = lmmc_rng_uniform(rng, (lmmc_real_t)0, (lmmc_real_t)1, &value);
19 if (status != LMMC_STATUS_OK) { return status; }
20 return lmmc_std_store_finite_real(value, out);
21}
22
24 int64_t hi, int64_t* out)
25{
26 if (!rng || !out) { return LMMC_STATUS_INVALID_ARGUMENT; }
27 return lmmc_rng_int_uniform(rng, lo, hi, out);
28}
29
31 lmmc_real_t stddev, lmmc_real_t* out)
32{
33 lmmc_real_t value;
34 lmmc_status_t status;
35 if (!rng || !out) { return LMMC_STATUS_INVALID_ARGUMENT; }
36 if (!lmmc_std_real_is_finite(mean) ||
37 !lmmc_std_real_is_finite(stddev)) {
39 }
40 status = lmmc_rng_normal(rng, mean, stddev, &value);
41 if (status != LMMC_STATUS_OK) { return status; }
42 return lmmc_std_store_finite_real(value, out);
43}
44
46 const lmmc_real_t* values,
47 size_t count,
48 lmmc_real_t* out)
49{
50 int64_t index = 0;
51 lmmc_status_t status;
52 if (!rng || !values || !out) {
54 }
55 if (count == 0) { return LMMC_STATUS_EMPTY_INPUT; }
56 if (count > (size_t)INT64_MAX) { return LMMC_STATUS_OUT_OF_RANGE; }
57 if (!lmmc_std_real_array_is_finite(values, count)) {
59 }
60 status = lmmc_rng_int_uniform(rng, 0, (int64_t)count - 1, &index);
61 if (status != LMMC_STATUS_OK) { return status; }
62 return lmmc_std_store_finite_real(values[index], out);
63}
64
65
70
75
80
82 int64_t hi,
83 int64_t* out)
84{
86 lmmc_rng_default_get(), lo, hi, out);
87}
88
96
98 size_t count,
99 lmmc_real_t* out)
100{
102 lmmc_rng_default_get(), values, count, out);
103}
double lmmc_real_t
Public and internal LMMC real type.
void lmmc_rng_default_reset(void)
lmmc_rng_t * lmmc_rng_default_get(void)
伪随机数发生器与常用分布。
lmmc_status_t lmmc_rng_normal(lmmc_rng_t *rng, lmmc_real_t mean, lmmc_real_t stddev, lmmc_real_t *out_value)
生成正态分布 样本。
lmmc_status_t lmmc_rng_int_uniform(lmmc_rng_t *rng, int64_t lo, int64_t hi, int64_t *out)
在 [lo, hi] 闭区间内生成无偏均匀整数分布样本。
lmmc_status_t lmmc_rng_uniform(lmmc_rng_t *rng, lmmc_real_t a, lmmc_real_t b, lmmc_real_t *out_value)
实数分布参数的公共约束。
lmmc_status_t lmmc_rng_seed(lmmc_rng_t *rng, uint64_t seed)
重新设定种子。
随机数发生器(不透明类型)。
lmmc_status_t
LMMC 库统一返回的状态码.
@ LMMC_STATUS_OK
@ LMMC_STATUS_NUMERICAL_FAILURE
@ LMMC_STATUS_INVALID_ARGUMENT
@ LMMC_STATUS_OUT_OF_RANGE
@ LMMC_STATUS_EMPTY_INPUT
lmmc_status_t lmmc_std_random_default_rand(lmmc_real_t *out)
lmmc_status_t lmmc_std_random_seed(lmmc_rng_t *rng, uint64_t seed)
void lmmc_std_random_default_deinit(void)
各线程独立持有默认随机流,采用零分配实现。 反初始化仅重置调用线程的流。
lmmc_status_t lmmc_std_random_normal(lmmc_rng_t *rng, lmmc_real_t mean, lmmc_real_t stddev, lmmc_real_t *out)
lmmc_status_t lmmc_std_random_default_normal(lmmc_real_t mean, lmmc_real_t stddev, lmmc_real_t *out)
lmmc_status_t lmmc_std_random_rand(lmmc_rng_t *rng, lmmc_real_t *out)
lmmc_status_t lmmc_std_random_default_choice(const lmmc_real_t *values, size_t count, lmmc_real_t *out)
lmmc_status_t lmmc_std_random_randint(lmmc_rng_t *rng, int64_t lo, int64_t hi, int64_t *out)
lmmc_status_t lmmc_std_random_default_seed(uint64_t seed)
lmmc_status_t lmmc_std_random_choice(lmmc_rng_t *rng, const lmmc_real_t *values, size_t count, lmmc_real_t *out)
lmmc_status_t lmmc_std_random_default_randint(int64_t lo, int64_t hi, int64_t *out)