Chinaunix

标题: 请教关于rand()给我出负数的问题 [打印本页]

作者: eric-guo    时间: 2005-01-31 18:24
标题: 请教关于rand()给我出负数的问题
代码如下:

#include <cstdlib>;
#include <ctime>;
#include <iostream>;
#include <string>;
using namespace std;

int  main ()

{
  float k;
  const int N=5;

   srand((unsigned)time(NULL));
    rand();


  for (int u=0 ; u<10 ; u++)
  {

  k=(float)N * rand()/(RAND_MAX+1);

  cout << k << "\n";
  }

  return 0;
}


为什么打印出来的K都是负值啊?这是为啥阿??
作者: lenovo    时间: 2005-01-31 18:39
标题: 请教关于rand()给我出负数的问题
因为
》》(float)N * rand()/(RAND_MAX+1);
你在N的前面加了一个float。
作者: yuxh    时间: 2005-01-31 19:03
标题: 请教关于rand()给我出负数的问题
rand()返回一个0-2^32之间的随机数(无符号整型)
k=(float)N * rand()/(RAND_MAX+1);
???不知道你想干什么。
作者: eric-guo    时间: 2005-01-31 19:08
标题: 请教关于rand()给我出负数的问题
上面的一段代码只是说明问题用的,单就那段代码来说没有任何意义,只是想打印出十个随机数。为什么我加了(float)就会给我负数?去掉了之后结果就不正确了阿。给我一串 0 啊。难不成我要在前面加个负号?
作者: yuxh    时间: 2005-01-31 19:39
标题: 请教关于rand()给我出负数的问题
k = rand() % N;
作者: kj501    时间: 2005-01-31 19:41
标题: 请教关于rand()给我出负数的问题
如果只是想得到浮点随机数,把程序修改两句:
const float N=5.0;
...
k=N * rand()/(RAND_MAX+1.0);
作者: eric-guo    时间: 2005-01-31 19:51
标题: 请教关于rand()给我出负数的问题
原帖由 "kj501" 发表:
如果只是想得到浮点随机数,把程序修改两句:
const float N=5.0;
...
k=N * rand()/(RAND_MAX+1.0);


   这样果然结果正确了,但是不得其解,为什么N变成浮点了结果就正确了呢???
作者: yuxh    时间: 2005-01-31 20:02
标题: 请教关于rand()给我出负数的问题
与N无关,而是RAND_MAX+1是个负数,RAND_MAX+1.0是个正数,但RAND_MAX+1.0会损失精度
作者: kj501    时间: 2005-01-31 20:17
标题: 请教关于rand()给我出负数的问题
[quote]原帖由 "yuxh"]与N无关,而是RAND_MAX+1是个负数,RAND_MAX+1.0是个正数,但RAND_MAX+1.0会损失精度[/quote 发表:

和N有关,两样的道理,在语句k=N * rand()/(RAND_MAX+1.0)中当N是整数时N*rand()的积有可能会溢出而得到负数.
作者: yuxh    时间: 2005-01-31 20:20
标题: 请教关于rand()给我出负数的问题
我指的是这种用法float)N * rand()
.
作者: eric-guo    时间: 2005-02-01 09:52
标题: 请教关于rand()给我出负数的问题
原帖由 "kj501" 发表:

和N有关,两样的道理,在语句k=N * rand()/(RAND_MAX+1.0)中当N是整数时N*rand()的积有可能会溢出而得到负数.


    但是我的运行结果是每一个打印出来的数都是负数啊。
作者: locallocal    时间: 2005-03-03 10:22
标题: 请教关于rand()给我出负数的问题
不知道各位有没有遇见过这样的情况,一个程序是一个打印rand的返回的值,好像每次给出数字的顺序都是同样的
作者: kj501    时间: 2005-03-03 10:41
标题: 请教关于rand()给我出负数的问题
[quote]原帖由 "locallocal"]不知道各位有没有遇见过这样的情况,一个程序是一个打印rand的返回的值,好像每次给出数字的顺序都是同样的[/quote 发表:

你是说rand每次返回的值是一样的吗?那是你没有做好随机数的种子。man srand。
作者: locallocal    时间: 2005-03-03 16:26
标题: 请教关于rand()给我出负数的问题
看到一个新方法,在rand调用之前,调用srand((unsigned int )tiime(NULL))




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2