首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成跟随特定分布的随机双倍

生成跟随特定分布的随机双倍
EN

Stack Overflow用户
提问于 2018-10-11 18:14:32
回答 1查看 65关注 0票数 0

因此,我有发行版f(x) = (4-2x)/3,用于x in [0,1],以及其他地方的f(x) = 0

我现在想要从这个分布中生成,比如说n=100个随机数。我试着遵循示例,这是我自己的代码:

代码语言:javascript
复制
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <math.h>
#include <stdlib.h>

//pdf(x) = 1 if x>1
//       = 0 if x<0
//       = 1/3*(4-2x) otherwise

int N = 10;
int var1(int argc, char **argv) {
    int p = 0, i;
    for (i = 0; i < N; i++) {
        p = (double)(rand() % 100)/100; // Generates 100 numbers in [0,1]
        if (p > 1)
            printf("%d ", 0);  
        else if (p < 0)
            printf("%d ", 0);
        else
            printf("%f ", p * (4-2*0.1)/3);

    }
    printf("...");
    return 0;
}

然而,我的输出只是零:

代码语言:javascript
复制
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 …

我有两个问题:

  1. 我遗漏了什么?
  2. 在我提供的链接中,为什么他用0.1代替了0.1?我只是做了同样的事,但我不明白为什么。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-11 18:30:25

首先,您没有返回您认为是的随机数的范围:

代码语言:javascript
复制
p = (double)(rand() % 100)/100;

右手的大小会给你一个范围内的数字( 0.00,0.01,0.02 . 0.99 )。但是,将该值赋值给p,它的类型为int。小数部分被截断,因此赋值始终为0。

p类型更改为double以存储适当的值。此外,如果您想要更大范围的随机值,请使用以下方法:

代码语言:javascript
复制
p = (double)rand() / RAND_MAX;

至于这一点:

代码语言:javascript
复制
printf("%f ", p * (4-2*0.1)/3);

与链接代码相比:

代码语言:javascript
复制
printf("%f ", p * 0.1 / 360);

他们的代码并没有用0.1代替xpx是一样的,但是由于某种原因,他们增加了额外的0.1因子。

要想做f(x) = (4-2x)/3,您需要这样做:

代码语言:javascript
复制
printf("%f ", (4-2*p)/3);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52766539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档