这行代码是什么意思?

3 c

我想知道这行代码是什么意思?

b = (gen_rand_uniform()>0.5)?1:0;
Run Code Online (Sandbox Code Playgroud)

gren_rand_uniform()是一个生成随机0和1数字的函数.但是我不明白它们的含义>0.51:0.

我知道这应该是一个基本问题,请耐心等待.

谢谢!

Chr*_*utz 12

我不认为get_rand_uniform()你认为它做了什么.它可能看起来像这样:

float get_rand_uniform(void);
Run Code Online (Sandbox Code Playgroud)

或者也许吧double.重点是,它返回0到1 之间的随机十进制数.所以这个:

get_rand_uniform() > 0.5
Run Code Online (Sandbox Code Playgroud)

是检查该数字是否接近1或0.并且:

x ? y : z
Run Code Online (Sandbox Code Playgroud)

是三元条件运算符,它具有与此相同的功能:

if(x) { y } else { z }
Run Code Online (Sandbox Code Playgroud)

除了三元运算符是表达式.所有这一切:

get_rand_uniform() > 0.5 ? 1 : 0
Run Code Online (Sandbox Code Playgroud)

基本上是将随机浮点数舍入为1或0,这个:

b = get_rand_uniform() > 0.5 ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)

指定随机选择1或0 b.我相信这里的括号是不必要的,但如果你喜欢它们,那就去吧.


Mic*_*ngh 11

这是速记.在您给出的示例中,它相当于:

if (gen_rand_uniform() > 0.5) {
    b = 1;
} else {
    b = 0;
}
Run Code Online (Sandbox Code Playgroud)

由于gen_rand_uniform()可能在1和之间生成均匀分布的随机数0,因此该值高于0.5的可能性为50%.这意味着获得a 1或a的几率为50%0

  • 那个三元运算符是多余的; 该语句的效果相当于`b =(gen_rand_uniform()> 0.5);` (5认同)