憨厚的毛衣 · 百老汇明星作曲“野角叔”来华开启音乐剧《人间 ...· 1 月前 · |
想表白的羊肉串 · 计算机、移动存储介质使用保密须知——从互联网 ...· 2 月前 · |
深情的火车 · 41亿被冻结!汇源果汁创始人被列为失信被执行人· 7 月前 · |
乐观的长颈鹿 · 重磅!临泉第二条高速开工啦!_腾讯新闻· 10 月前 · |
我用Fortran编写了一个使用RANDOM_NUMBER()并使用gfortran编译的程序,但是我注意到生成的随机数在不同版本之间是不一致的。如果不使用RANDOM_SEED()作为随机数生成器的种子,则gfortran4.4.7( Centos 6中的默认值)和gfortran4.8.5( Centos 7中的默认值)都会产生相同的随机数序列。这让我感到惊讶,因为gfortran 4.4.7中的默认种子长8个整数,而gfortran 4.8.5中的缺省种子长12个整数,数字完全不同,但随机数序列仍然是相同的。另一方面,gfortran7.3.1(包含在Centos 7中的devtoolset7包中)在每次运行中都会产生不同的随机数序列,除非用RANDOM_SEED()初始化它。但是,此版本中的种子由33个整数组成,因此旧版本的种子将无法工作。
为了重现性,我需要在每次运行中复制完全相同的随机数序列,而不考虑gfortran版本。我想知道是否有一种方法在不同的gfortran版本之间转换默认的种子,或者是否有其他方法来获得与任何gfortran版本相同的随机数序列。
不,对于GFortran 7,PRNG算法被改变为一种完全不同的算法。对于GFortran <7和>= 7,基本上没有办法获得相同的随机数流。
如果您需要不同GFortran版本之间的精确再现性,则需要使用另一个PRNG实现。
詹妮布是对的。
如果您需要编译器版本之间的一致性,甚至编译器(
ifort
,
pgfortran
)之间的一致性,那么您应该使用内置工具以外的其他工具。我个人知道SPRNG (
http://www.sprng.org/
),大概还有许多其他类似的工具。
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
扫码关注腾讯云开发者
领取腾讯云代金券