数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 4118|回复: 4

如何用C语言制作一个随机函数发生器啊

[复制链接]
发表于 2003-8-24 22:44:07 | 显示全部楼层 |阅读模式
拜托各位帮帮忙啊
发表于 2003-8-24 23:56:20 | 显示全部楼层
可以用MATLAB生成后用接口或文件传给C
发表于 2003-10-29 19:38:26 | 显示全部楼层
我不懂,麻烦赐教
发表于 2003-10-30 07:59:23 | 显示全部楼层
随即函数可以用matlab语言实现,然后连接的c语言中!要不然,你就利用matlab中的实现方法,到c试一试,一定10可以的!若我有空,我就帮你编译下了!
发表于 2003-10-30 19:24:44 | 显示全部楼层
比较公认的算法程序:
#define MBIG 1000000000
#define MSEED 161803398
#define MZ 0
#define FAC (1.0/MBIG)

float ran3(idum)
int *idum;
{
        static int inext,inextp;
        static long ma[56];
        static int iff=0;
        long mj,mk;
        int i,ii,k;

        if (*idum < 0 || iff == 0) {
                iff=1;
                mj=MSEED-(*idum < 0 ? -*idum : *idum);
                mj %= MBIG;
                ma[55]=mj;
                mk=1;
                for (i=1;i<=54;i++) {
                        ii=(21*i) % 55;
                        ma[ii]=mk;
                        mk=mj-mk;
                        if (mk < MZ) mk += MBIG;
                        mj=ma[ii];
                }
                for (k=1;k<=4;k++)
                        for (i=1;i<=55;i++) {
                                ma -= ma[1+(i+30) % 55];
                                if (ma < MZ) ma += MBIG;
                        }
                inext=0;
                inextp=31;
                *idum=1;
        }
        if (++inext == 56) inext=1;
        if (++inextp == 56) inextp=1;
        mj=ma[inext]-ma[inextp];
        if (mj < MZ) mj += MBIG;
        ma[inext]=mj;
        return mj*FAC;
}

#undef MBIG
#undef MSEED
#undef MZ
#undef FAC
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 01:25 , Processed in 0.052535 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表