LMMC
Lamina Mathematic core
Toggle main menu visibility
载入中...
搜索中...
未找到
stdlib_random.c
浏览该文件的文档.
1
#include "
lmmc/stdlib.h
"
2
3
#include "
lmmc/random.h
"
4
5
#include "
stdlib_internal.h
"
6
7
lmmc_status_t
lmmc_std_random_seed
(
lmmc_rng_t
* rng, uint64_t seed)
8
{
9
if
(!rng) {
return
LMMC_STATUS_INVALID_ARGUMENT
; }
10
return
lmmc_rng_seed
(rng, seed);
11
}
12
13
lmmc_status_t
lmmc_std_random_rand
(
lmmc_rng_t
* rng,
lmmc_real_t
* out)
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
23
lmmc_status_t
lmmc_std_random_randint
(
lmmc_rng_t
* rng, int64_t lo,
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
30
lmmc_status_t
lmmc_std_random_normal
(
lmmc_rng_t
* rng,
lmmc_real_t
mean,
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)) {
38
return
LMMC_STATUS_NUMERICAL_FAILURE
;
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
45
lmmc_status_t
lmmc_std_random_choice
(
lmmc_rng_t
* rng,
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) {
53
return
LMMC_STATUS_INVALID_ARGUMENT
;
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)) {
58
return
LMMC_STATUS_NUMERICAL_FAILURE
;
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
66
void
lmmc_std_random_default_deinit
(
void
)
67
{
68
lmmc_rng_default_reset
();
69
}
70
71
lmmc_status_t
lmmc_std_random_default_seed
(uint64_t seed)
72
{
73
return
lmmc_std_random_seed
(
lmmc_rng_default_get
(), seed);
74
}
75
76
lmmc_status_t
lmmc_std_random_default_rand
(
lmmc_real_t
* out)
77
{
78
return
lmmc_std_random_rand
(
lmmc_rng_default_get
(), out);
79
}
80
81
lmmc_status_t
lmmc_std_random_default_randint
(int64_t lo,
82
int64_t hi,
83
int64_t* out)
84
{
85
return
lmmc_std_random_randint
(
86
lmmc_rng_default_get
(), lo, hi, out);
87
}
88
89
lmmc_status_t
lmmc_std_random_default_normal
(
lmmc_real_t
mean,
90
lmmc_real_t
stddev,
91
lmmc_real_t
* out)
92
{
93
return
lmmc_std_random_normal
(
94
lmmc_rng_default_get
(), mean, stddev, out);
95
}
96
97
lmmc_status_t
lmmc_std_random_default_choice
(
const
lmmc_real_t
* values,
98
size_t
count,
99
lmmc_real_t
* out)
100
{
101
return
lmmc_std_random_choice
(
102
lmmc_rng_default_get
(), values, count, out);
103
}
lmmc_real_t
double lmmc_real_t
Public and internal LMMC real type.
定义
config.h:28
lmmc_rng_default_reset
void lmmc_rng_default_reset(void)
定义
random.c:58
lmmc_rng_default_get
lmmc_rng_t * lmmc_rng_default_get(void)
定义
random.c:50
random.h
伪随机数发生器与常用分布。
lmmc_rng_normal
lmmc_status_t lmmc_rng_normal(lmmc_rng_t *rng, lmmc_real_t mean, lmmc_real_t stddev, lmmc_real_t *out_value)
生成正态分布 样本。
定义
random_normal.c:93
lmmc_rng_int_uniform
lmmc_status_t lmmc_rng_int_uniform(lmmc_rng_t *rng, int64_t lo, int64_t hi, int64_t *out)
在 [lo, hi] 闭区间内生成无偏均匀整数分布样本。
定义
random.c:329
lmmc_rng_uniform
lmmc_status_t lmmc_rng_uniform(lmmc_rng_t *rng, lmmc_real_t a, lmmc_real_t b, lmmc_real_t *out_value)
实数分布参数的公共约束。
定义
random.c:220
lmmc_rng_seed
lmmc_status_t lmmc_rng_seed(lmmc_rng_t *rng, uint64_t seed)
重新设定种子。
定义
random.c:96
lmmc_rng_t
随机数发生器(不透明类型)。
定义
random_internal.h:7
lmmc_status_t
lmmc_status_t
LMMC 库统一返回的状态码.
定义
status.h:22
LMMC_STATUS_OK
@ LMMC_STATUS_OK
定义
status.h:23
LMMC_STATUS_NUMERICAL_FAILURE
@ LMMC_STATUS_NUMERICAL_FAILURE
定义
status.h:29
LMMC_STATUS_INVALID_ARGUMENT
@ LMMC_STATUS_INVALID_ARGUMENT
定义
status.h:24
LMMC_STATUS_OUT_OF_RANGE
@ LMMC_STATUS_OUT_OF_RANGE
定义
status.h:32
LMMC_STATUS_EMPTY_INPUT
@ LMMC_STATUS_EMPTY_INPUT
定义
status.h:35
stdlib.h
stdlib_internal.h
lmmc_std_random_default_rand
lmmc_status_t lmmc_std_random_default_rand(lmmc_real_t *out)
定义
stdlib_random.c:76
lmmc_std_random_seed
lmmc_status_t lmmc_std_random_seed(lmmc_rng_t *rng, uint64_t seed)
定义
stdlib_random.c:7
lmmc_std_random_default_deinit
void lmmc_std_random_default_deinit(void)
各线程独立持有默认随机流,采用零分配实现。 反初始化仅重置调用线程的流。
定义
stdlib_random.c:66
lmmc_std_random_normal
lmmc_status_t lmmc_std_random_normal(lmmc_rng_t *rng, lmmc_real_t mean, lmmc_real_t stddev, lmmc_real_t *out)
定义
stdlib_random.c:30
lmmc_std_random_default_normal
lmmc_status_t lmmc_std_random_default_normal(lmmc_real_t mean, lmmc_real_t stddev, lmmc_real_t *out)
定义
stdlib_random.c:89
lmmc_std_random_rand
lmmc_status_t lmmc_std_random_rand(lmmc_rng_t *rng, lmmc_real_t *out)
定义
stdlib_random.c:13
lmmc_std_random_default_choice
lmmc_status_t lmmc_std_random_default_choice(const lmmc_real_t *values, size_t count, lmmc_real_t *out)
定义
stdlib_random.c:97
lmmc_std_random_randint
lmmc_status_t lmmc_std_random_randint(lmmc_rng_t *rng, int64_t lo, int64_t hi, int64_t *out)
定义
stdlib_random.c:23
lmmc_std_random_default_seed
lmmc_status_t lmmc_std_random_default_seed(uint64_t seed)
定义
stdlib_random.c:71
lmmc_std_random_choice
lmmc_status_t lmmc_std_random_choice(lmmc_rng_t *rng, const lmmc_real_t *values, size_t count, lmmc_real_t *out)
定义
stdlib_random.c:45
lmmc_std_random_default_randint
lmmc_status_t lmmc_std_random_default_randint(int64_t lo, int64_t hi, int64_t *out)
定义
stdlib_random.c:81
src
stdlib_random.c
生成于
, 为 LMMC使用
1.18.0