介于0和1之间的rand() [英] rand() between 0 and 1

查看:197
本文介绍了介于0和1之间的rand()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,以下代码将0设为<& 1

So the following code makes 0 < r < 1

r = ((double) rand() / (RAND_MAX))

为什么让r = ((double) rand() / (RAND_MAX + 1))使-1< & 0?

Why does having r = ((double) rand() / (RAND_MAX + 1)) make -1 < r < 0?

不得将RAND_MAX中的1加1. & 2?

Shouldn't adding one to RAND_MAX make 1 < r < 2?

我收到警告:表达式中的整数溢出

I was getting a warning: integer overflow in expression

在那一行上,所以可能是问题所在.我只是做了cout << r << endl,它肯定给了我-1和0之间的值

on that line, so that might be the problem. I just did cout << r << endl and it definitely gives me values between -1 and 0

推荐答案

这完全是实现特定的,但是看来在您使用的C ++环境中,RAND_MAX等于INT_MAX.

This is entirely implementation specific, but it appears that in the C++ environment you're working in, RAND_MAX is equal to INT_MAX.

因此,RAND_MAX + 1表现出不确定的(溢出)行为,并变为INT_MIN.当您的初始语句是除法(0和INT_MAX之间的随机数)/(INT_MAX)并生成值0 <= r < 1时,现在它是除法(0和INT_MAX之间的随机数)/(INT_MIN),生成值-1 < r <= 0

Because of this, RAND_MAX + 1 exhibits undefined (overflow) behavior, and becomes INT_MIN. While your initial statement was dividing (random # between 0 and INT_MAX)/(INT_MAX) and generating a value 0 <= r < 1, now it's dividing (random # between 0 and INT_MAX)/(INT_MIN), generating a value -1 < r <= 0

要生成随机数1 <= r < 2,您需要

r = ((double) rand() / (RAND_MAX)) + 1

这篇关于介于0和1之间的rand()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆