相关疑难解决方法(0)

如何在C中生成随机int?

是否有在C中生成随机int数的函数?或者我必须使用第三方库吗?

c random

527
推荐指数
11
解决办法
154万
查看次数

如何生成总计为0.0的n大小的随机浮点数组?

考虑到我需要一个n大小的矢量,其中每个元素都定义在[-1,1]之间。元素a [i]是由-1 + 2 * rand()生成的浮点数。我需要一种优雅的方法来确保数组元素的总和等于零。

我发现了两种可能的解决方案:

第一个是这个matlab函数https://www.mathworks.com/matlabcentral/fileexchange/9700-random-vectors-with-fixed-sum。它在R中也有一个实现,但是在C上实现它的工作量很大,因为此函数用于2d数组。

此线程在此处提供第二个在C ++中生成具有固定总和的随机值。本质上,这个想法是生成具有正态分布的n个数字,然后用我的总和将它们归一化。(我已经使用python波纹管实现了它),向量总计为1.0。它适用于除零以外的每个和值。

import random as rd

mySum = 1;
randomVector = []
randomSum = 0

for i in range(7):
    randomNumber = -1 + 2*rd.random()
    randomVector.append(randomNumber)
    randomSum  += randomNumber

coef = mySum/randomSum
myNewList = [j * coef for j in randomVector]
newsum = sum(myNewList)
Run Code Online (Sandbox Code Playgroud)

那么,有没有办法使用C或C ++做到这一点?如果您知道已经实现的功能,那就太好了。谢谢。

c c++ arrays random

6
推荐指数
1
解决办法
177
查看次数

使用C查找pi的蒙特卡洛方法

我编写了一个函数,该函数需要一个很长的long值n,并将其用作要经过的迭代次数。该函数应该可以很好地估计pi,但是,大的所有值都n趋向于3.000,而不是3.1415,所以我不确定发生了什么?

我做错了什么吗?

这是我的代码:

double estimate_pi(long long n){
    double randomx, randomy, equation, pi;
    long long i, incircle = 0;

    for(i = 0; i < n; i++){
        randomx = (double)(rand() % (1+1-0) + 0);
        randomy = (double)(rand() % (1+1-0) + 0);

        equation = randomx * randomx + randomy * randomy;

        if(equation <= 1){
            incircle++;
        }
    }

    pi = (long double)4 * (long double)incircle / (long double)n;

    return pi;
}
Run Code Online (Sandbox Code Playgroud)

在主函数中,打印pi的10个值:

int main(void){

    long long N;
    double pi_approx;
    int …
Run Code Online (Sandbox Code Playgroud)

c pi montecarlo

5
推荐指数
2
解决办法
169
查看次数

标签 统计

c ×3

random ×2

arrays ×1

c++ ×1

montecarlo ×1

pi ×1