【问题标题】:How to generate random numbers between -1 and 1 in C? [duplicate]如何在C中生成-1和1之间的随机数? [复制]
【发布时间】:2014-04-02 15:22:17
【问题描述】:

我正在尝试对一项作业进行蒙特卡洛积分。这涉及在 x 和 y 轴上生成 -1 和 1 之间的随机数......我想我知道如何生成 0 和 1 之间的随机数,但不知道如何将其更改为 -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;
}

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

【问题讨论】:

    标签: c random numbers negative-number


    【解决方案1】:
    double randf(double low,double high){
        return (rand()/(double)(RAND_MAX))*abs(low-high)+low;
    }
    
    randf(-1,1);
    

    【讨论】:

    • 优雅的代码,但为什么要使用floatdouble 会更好。
    • @yu 取决于你为什么需要它,我通常使用浮点数,因为我不需要双精度和内存使用很重要。在大多数问题中双精度不是必需的,浮点数就足够了准确性。
    • 从其用途来看,我认为内存使用在此功能中并不重要。这几乎是float 相对于double 的唯一优势。另外,OP 代码中的参数和结果使用double,使用float 将需要额外的演员表。
    • 你说得对,在这种情况下没关系,它只是我的习惯总是使用浮动:),我改变了它。
    【解决方案2】:

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

    【讨论】:

    • 完美谢谢! :)
    【解决方案3】:

    给你...

    y=rand() % 3 - 1;
    

    "%3" 会使它所有的结果都在 0 和 2 之间。

    -1 会减少它,所以最小的数字可以是 -1。

    示例:

    如果您从 mod 中获得数字 2,则 -1 将使其成为 1。

    如果你从模组中得到一个数字 1,那么 -1 将使它成为 0。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      相关资源
      最近更新 更多