免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6295 | 回复: 14

rand() 的值域是 [0, RAND_MAX) 吗, 标准上是怎么说的 [复制链接]

论坛徽章:
0
发表于 2012-05-19 16:55 |显示全部楼层
本帖最后由 三月廿七 于 2012-05-19 17:13 编辑

左右都是开闭区间吗??

论坛徽章:
0
发表于 2012-05-19 17:13 |显示全部楼层
回复 1# 三月廿七


   
捕获.PNG

论坛徽章:
0
发表于 2012-05-19 17:17 |显示全部楼层
walleeee 发表于 2012-05-19 17:13
回复 1# 三月廿七

你看过c 算法吗?

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "Point.h"
typedef struct node* link;
struct node { point p;  link next; };
link **grid; int G; float d; int cnt = 0;
gridinsert(float x, float y)
  { int i, j; link s;
    int X = x*G +1; int Y = y*G+1;
    link t = malloc(sizeof *t);
    t->p.x = x; t->p.y = y;
    for (i = X-1; i <= X+1; i++)
      for (j = Y-1; j <= Y+1; j++)
        for (s = grid[j]; s != NULL; s = s->next)
          if (distance(s->p, t->p) < d) cnt++;
    t->next = grid[X][Y]; grid[X][Y] = t;
  }
main(int argc, char *argv[])
{ int i, j, N = atoi(argv[1]);
   d = atof(argv[2]); G = 1/d;
   grid = malloc2d(G+2, G+2);
   for (i = 0; i < G+2; i++)
     for (j = 0; j < G+2; j++)
       grid[j] = NULL;
   for (i = 0; i < N; i++)
     gridinsert(randFloat(), randFloat());
   printf("%d edges shorter than %f\n", cnt, d);
}

感觉这段代码会越界

论坛徽章:
0
发表于 2012-05-19 17:23 |显示全部楼层
本帖最后由 三月廿七 于 2012-05-19 17:25 编辑

float randFloat()
  { return 1.0*rand()/RAND_MAX; }


假设 d = 0.2,   则 G = 5
假设 x =1.0,    则 X =  x*G +1 = 6

那么  for (i = X-1; i <= X+1; i++)
  ->  for (i = 5, i <= 7; i++)

malloc2d(5 + 2, 5 + 2);
数组索引是 [0, 6]

论坛徽章:
0
发表于 2012-05-19 17:32 |显示全部楼层
回复 3# 三月廿七


1) 显然要出问题嘛,你上来就直接argv[1],argv[2]了,能不出问题?
2) 你如果atof出来的d是0.0f,那你1/d不也出问题了?
3) 你这个代码在表达什么?
    for (i = 0; i < G+2; i++)
     for (j = 0; j < G+2; j++)
       grid[j] = NULL;
    我怎么看起来那么意外?
4) 这是什么东西
    link t = malloc(sizeof *t);
5) 如果d很小,是不是1/d会很大?换句话说G会很大,会不会溢出,会不会导致
    这些
    int X = x*G +1; int Y = y*G+1;
    以及这些
    for (i = X-1; i <= X+1; i++)
    都成问题?

一下我不想看了。这代码是你写的?

论坛徽章:
0
发表于 2012-05-19 17:35 |显示全部楼层

论坛徽章:
0
发表于 2012-05-19 17:35 |显示全部楼层
不是感觉要越界,而是问题太多,越界只算其中之一。

总之这个代码没有你所谓C的美感。如果1万行代码都是这种风格来写,那我估计真是神了。

论坛徽章:
0
发表于 2012-05-19 17:37 |显示全部楼层
本帖最后由 三月廿七 于 2012-05-19 17:42 编辑
walleeee 发表于 2012-05-19 17:32
回复 3# 三月廿七

二维数组链表, 比邻接表多一维

单位正方形内的点

我要下线了,

论坛徽章:
0
发表于 2012-05-19 17:37 |显示全部楼层
walleeee 发表于 2012-05-19 17:35
不是感觉要越界,而是问题太多,越界只算其中之一。

总之这个代码没有你所谓C的美感。如果1万行代码都是 ...


哦, 那人很牛B, 很权威的呀 !

论坛徽章:
0
发表于 2012-05-19 17:47 |显示全部楼层
回复 8# 三月廿七


这个我知道。

你以后每次答复别人的时候麻烦引出别人的原文,这样方便别人看,不然根本就不知道你再说什么。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP