等价陈述

Kit*_*ttu 5 fortran

码:

program CheckEquivalence
  integer*8 intarray(4)
  real*8 realarray(4)

  equivalence(realarray,intarray)
  realarray(3) = 3
  intarray(4) = 4
  realarray(1) = 1.0
  realarray(2) = 2.0

  do i = 1,4
    write(,) 'All real ', realarray(i)
  enddo
  do i = 1,4
    write(,) 'All int ', intarray(i)
  enddo
  do i = 1,3
    write(,) 'Some real ', realarray(i)
  enddo
  write(,) 'Last int ', intarray(4)
end
Run Code Online (Sandbox Code Playgroud)

输出是:

All real 1.
All real 2.
All real 3. 
All real 1.97626258E-323
All int 4607182418800017408 
All int 4611686018427387904
All int 4613937818241073152 
All int 4
Some real 1. 
Some real 2. 
Some real 3.
Last int 4
Run Code Online (Sandbox Code Playgroud)

我尝试了一个示例代码来理解等价是如何工作的.我的查询是以哪种格式存储内部数据,以及从中获得理论相同值的任何算法?

tpg*_*114 7

在这里回答:

fortran中的等价语句

两个值之间没有转换.它根据您写入变量的内容进行存储,并根据您访问变量的方式进行解释.因此,如果您写入REAL一个实数值,然后尝试打印整数变量,您将获得垃圾.反之亦然.

一般来说,不要使用EQUIVALENCE语句.他们是个坏主意并且已被弃用.如果您正在编写新代码,请不要将它们放入 - 如果您尝试解释旧代码,它们通常用于通过为不同目的重用相同位置来在内存中创建紧凑存储.