| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 621 人关注过本帖
标题:求助,帮忙看一下,这个程序在VC++6.0平台上怎么改
只看楼主 加入收藏
lonelycorner
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-4-7
结帖率:0
收藏
已结贴  问题点数:10 回复次数:4 
求助,帮忙看一下,这个程序在VC++6.0平台上怎么改

#define IADD   453806245
#define IMUL   314159269
#define MASK   2147483647
#define SCALE  0.4656612873e-9
int randSeedP = 17;
void InitRand (int randSeedI)
{
  struct timeval tv;
  if (randSeedI != 0) randSeedP = randSeedI;
  else {
    gettimeofday (&tv, 0);
    randSeedP = tv.tv_usec;
  }
}
real RandR ()
{
  randSeedP = (randSeedP * IMUL + IADD) & MASK;
  return (randSeedP * SCALE);
}
#if NDIM == 2                  //变量NDIM表示二维情形下
void VRand (VecR *p)
{
  real s;                        //自定义数据类型typedef double real
  s = 2. * M_PI * RandR ();
  p->x = cos (s);
  p->y = sin (s);
}
#elif NDIM == 3
void VRand (VecR *p)
{
  real s, x, y;
  s = 2.;
  while (s > 1.) {
    x = 2. * RandR () - 1.;
    y = 2. * RandR () - 1.;
    s = Sqr (x) + Sqr (y);
  }
  p->z = 1. - 2. * s;
  s = 2. * sqrt (1. - s);
  p->x = s * x;
  p->y = s * y;
}
#endif
搜索更多相关主题的帖子: void return MASK 
2013-04-07 10:26
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:5 
函数可以放在main函数的外部,你那里面的处理函数就放在main函数的内部吧!你的程序不完整吧!struct timeval tv;这个编译不错去,你没有timeval的结构体就来定义变量,粗略给你改下#elif NDIM == 3这个表达不对吧!条件编译
#if表达式
程序段1
#else
程序段2
#endif
如果表达式为真就执行程序段1,否则执行程序段2,粗略给你改下:#include<stdio.h>
 #define IADD   453806245
 #define IMUL   314159269
 #define MASK   2147483647
 #define SCALE  0.4656612873e-9
 int randSeedP = 17;
 void InitRand (int randSeedI)
 {
   struct timeval tv;
   if (randSeedI != 0) randSeedP = randSeedI;
   else
   {
     gettimeofday (&tv, 0);
     randSeedP = tv.tv_usec;
   }
 }


 real RandR ()
 {
   randSeedP = (randSeedP * IMUL + IADD) & MASK;
   return (randSeedP * SCALE);
 }

 int main()
 {
 #if NDIM == 2                  //变量NDIM表示二维情形下
 void VRand (VecR *p)
 {
   real s;                        //自定义数据类型typedef double real
   s = 2. * M_PI * RandR ();
   p->x = cos (s);
   p->y = sin (s);
 }
 #else NDIM == 3
 void VRand (VecR *p)
 {
   real s, x, y;
   s = 2.;
   while (s > 1.) {
     x = 2. * RandR () - 1.;
     y = 2. * RandR () - 1.;
     s = Sqr (x) + Sqr (y);
   }
   p->z = 1. - 2. * s;
   s = 2. * sqrt (1. - s);
   p->x = s * x;
   p->y = s * y;
 }
 #endif
 return 0;
 }


Maybe
2013-04-07 10:42
lonelycorner
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-4-7
收藏
得分:0 
回复 2楼 邓士林
嗯,不好意思,忘说清楚了:这个只是main函数中的一部分,目的应该是产生(0,1)之间的随机数。然后由VRand函数产生任意方向的单位向量。
这个是Unix平台上的代码,如果用<time.h>,那部分产生随机数的代码怎么改?
2013-04-07 10:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 

DO IT YOURSELF !
2013-04-07 11:01
lonelycorner
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-4-7
收藏
得分:0 
回复 4楼 wp231957
我如果这样改,这部分源程序和原来的功能一样么?假定头文件都已包含在main主程序内
#define M_PI 3.1415926
real RandR ()
{
  int seed;
  double d;
  seed=time(0);
  srand((unsigned int)seed);
  d=rand()/(double)RAND_MAX;
  return d;
}
#if NDIM == 2
void VRand (VecR *p)
{
  real s;
  s = 2. * M_PI * RandR ();
  p->x = cos (s);
  p->y = sin (s);
}
#elif NDIM == 3
void VRand (VecR *p)
{
  real s, x, y;
  s = 2.;
  while (s > 1.) {
    x = 2. * RandR () - 1.;
    y = 2. * RandR () - 1.;
    s = Sqr (x) + Sqr (y);
  }
  p->z = 1. - 2. * s;
  s = 2. * sqrt (1. - s);
  p->x = s * x;
  p->y = s * y;
}
#endif
2013-04-07 11:30
快速回复:求助,帮忙看一下,这个程序在VC++6.0平台上怎么改
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.061184 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved