2014-03-01 188 views
-1

我正在尝试蒙特卡罗集成工作。这涉及在x轴和y轴两者之间生成-1和1之间的随机数......我想我知道如何生成0到1之间的随机数字,但不知道如何将其更改为-1和1之间的数字。任何帮助,将不胜感激和感谢事先...这里的(有点)到目前为止我的代码:如何在C中生成-1和1之间的随机数?

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#include <time.h> 

double x,y; 


int main(){ 

srand(time(NULL)); 

x=rand()/(double)(RAND_MAX); 
y=rand()/(double)(RAND_MAX); /*HOW DO I MAKE THIS FROM -1 TO 1*/ 

return 0; 
} 

*我敢肯定,我可以解决这个问题的其余部分自己一旦我知道如何生成这些负面的随机数,所以上面的代码只是问题的一小部分(其余我打算做我自己)

回答

3

你不能只是做x=(rand()/(double)(RAND_MAX)) * 2 - 1

+0

完美谢谢! :) – user3368326

4
double randf(double low,double high){ 
    return (rand()/(double)(RAND_MAX))*abs(low-high)+low; 
} 

randf(-1,1); 
+0

优雅的代码,但为什么使用'浮动'? '双'会更好。 –

+0

@yu取决于你为什么需要它,我通常使用浮动因为我不需要双精度和内存使用的准确性很重要。在大多数问题中,双精度是没有必要的,浮点数有足够的精度。 – SteveL

+0

我不认为记忆的使用对于这个功能来说很重要。这几乎是'float'超过'double'的唯一优势。另外,OP代码中的参数和结果是使用'double',使用'float'会要求额外的转换。 –

1

在这里你去...

y=rand() % 3 - 1; 

的 “%3” 将会使这一切的结果是介于0和2

和-1会降低它,因此最低的数字可以是-1。

例如:

,如果你得到一个数字2,从国防部,-1将使1.

,如果你得到一个数字从1国防部,-1将使0。

如果您从mod获得数字0,则-1将使其为-1。 :)

相关问题