问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

fortran程序解读

发布网友 发布时间:2022-05-29 23:37

我来回答

1个回答

热心网友 时间:2024-09-14 07:30

double randomz (int ia, int ib)
{

double x; //返回值

static int initial[15]={0};
static double iz,iy[15]={0.0};

//使用static类型,为下次调用保留值,不然每次都要从头开始

switch(ia)
{
case 1: //ia参数为1,从键盘输入种子初始化随机数生成器
iz=100000001.0

read(5,'(5i8)') initial 这句话直接翻成C很难,
//意思就是从键盘(5号设备)连续读入5个整数(难道不是15?
// 我怀疑源码写错了,应该是15i8),存入整型数组 initial ;
//而且Fortran的格式描述符i8强制每个整数都是8位(千万位),
//如果输入不足8位就切换到下一个数进行输入,则Fortran会
//自动在不足8位的数的右侧补上足够的0,以放大到千万位

iy=dble(initial) 这句话直接翻成C很难,
//本句用到Fortran90/95特色的数组整体操作,C/C++要用循环;
//是把整型数组initial逐项复制给double数组iy,转换成double型

x = iy[ib]*1.0E-8 ;

case 2: //ia参数为2,继续使用已经初始化好了的生成器
iy[ib] = 329.0 * iy[ib] % iz ;
x = iy[ib]*1.0E-8 ;

case 3: //ia参数为3,重新初始化,但还使用原先的种子
iy=dble(initial) 这句话直接翻成C很难,用循环完成。
}
//switch结束

return x;
}

=================================

算法的主要思想就是“线性同余法”,
linear-congruential method
其基本迭代公式为
X[n+1] = ( A * X[n] + B )% C
X的初始值随便取

在你给的源代码里:
A= 329.0
B= 0
C= 100000001.0

源代码中的关键是 iy[ib] = 329.0 * iy[ib] % iz
另外 x = iy[ib]*1.0E-8 是为了将结果归一化到0~1之间再返回

你可以自己手工算几个数,就能看出这个算法的奥妙了。

另外需要指出的是——源代码里用static就是为了每次case 2时候的调用,都是在对上一次的结果进行迭代。而ib参数的用处就是保持有几组不同的独立迭代序列可用,防止不同用途的几处“生成伪随机数”调用互相干扰。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
win7窗口淡入淡出慢 iPhone 小技巧:如何将 Safari 浏览器中的网页添加到桌面? 锰粉是什么颜色的金属 铁精粉的常见颜色是什么 烟花爆竹中的金属粉末如何使其呈现绚丽色彩? 金粉有哪些种类 灰土每层回填最大厚度 灰土基础简史 如何让一个喜欢你的女孩讨厌你! 西环里新区基本资料 沙溢的小品_炊事班的故事台词 “戏霸”张丰毅太耿直,究竟是何原因? 请教下面fortran代码是什么意思? 张丰毅演的全部电视剧有哪些? 喜剧总动员里沙溢节目既然为夫妻和纵使千般苦,恩爱两不疑中间的台词 Fortran语言部分简单代码,求解释?? 2015年春晚贾玲沙溢表演的小品中的 音乐是啥? 如何新建一个固定格式或自由格式的Fortran文件(源代码)? 沙溢成为了综艺的“香饽饽”,他的综艺感到底强不强? 张丰毅是哪里的 贾玲和沙溢的小品在哪个节目之后 fortran分段函数程序代码 喜剧总动员沙溢 老爸 各位大神,Fortran代码中有的代码行中出现绿色底色的标号是什么意思... fortran代码 跪求沙溢朱迅小品《过河》台词 德雷克是不是英国海盗呢? 额,请问drake到底怎么读 詹姆斯更新社媒为Drake庆生,他们之间的关系如何? Drake什么意思 谁有斯诺克球手罗宾逊(Neil Robertson)的介绍? 一个公式写成Fortran语言代码 谁知道澳大利亚打斯诺克的neil robertson的档案吗? fortran中下列代码什么意思? do i=1,np iflag(i)=0 nd(i)=0 do j=... 打斯诺克的罗伯特森和罗伯逊是一个人吧? 写一个FORTRAN程序 关于斯诺克球员 neil robertson 了解请进,可追加分! neil robertson! 下载了一个Fortran代码运行出现以下情况,有比较熟悉这方面的帮帮忙吗... Neil Robertson在2007年斯诺克中国公开赛上被谁淘汰了? fortran 代码求解 昆明林云宾馆至延安会都几公里 斯诺克选手里Neil Robertson最官方的名字到底是什么? 我在小石坝要去延安会都坐几路公交车 斯诺克选手除了英国(北爱,苏各蓝)的和中国的还有哪的选手 以延安为首都的是哪个王朝 黎鸣的四色问题现在是什么样的结果? 斯诺克球员排名现阶段 延安是革命的圣地为什么中国的首都不选在那 2010年10月30延安红色演唱会都有哪些明星?