热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

gfortran中隐含的数组构造函数的奇怪初始化行为

如何解决《gfortran中隐含的数组构造函数的奇怪初始化行为》经验,是哪儿的问题?

假设我有3个双精度数组,

real*8, dimension(n) :: x, y, z

初始化为

x = 1.
y = (/ (1., i=1,n) /)
z = (/ (1. +0*i, i=1,n) /)

他们应该将所有数组的所有元素初始化为1.在ifort(16.0.0 20150815)中,这适用n于声明的精度范围内的任何范围.也就是说,如果我们初始化n

integer*4, parameter :: n

然后,只要n <2147483647初始化按预期用于所有声明.

gfortran(4.8.5 20150623红帽4.8.5-16),初始化失败对于y(具有恒定的参数数组理解),只要n>65535,独立的其精度.AFAIK,65535是a的最大值unsigned short int,也就是说unsigned int*2,它在范围内integer*4.

以下是MWE:

program test
    implicit none

    integer*4, parameter :: n = 65536
    integer*4, parameter :: m = 65535
    real*8, dimension(n) :: x, y, z
    real*8, dimension(m) :: a, b, c
    integer*4 :: i

    print *, huge(n)

    x = 1.
    y = (/ (1., i=1,n) /)
    z = (/ (1.+0*i, i=1,n) /)
    print *, x(n), y(n), z(n)

    a = 1.
    b = (/ (1., i=1,m) /)
    c = (/ (1.+0*i, i=1,m) /)
    print *, a(m), c(m), c(m)
end program test

gfortran(gfortran test.f90 -o gfortran_test)编译,它输出:

  2147483647
   1.0000000000000000        0.0000000000000000        1.0000000000000000     
   1.0000000000000000        1.0000000000000000        1.0000000000000000

ifort(ifort test.f90 -o ifort_test)编译,它输出:

2147483647
   1.00000000000000        1.00000000000000        1.00000000000000     
   1.00000000000000        1.00000000000000        1.00000000000000     

是什么赋予了?


推荐阅读
author-avatar
王言
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有