fortran - 等价陈述

标签 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

输出是:
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

我尝试了一个示例代码来了解等效性的工作原理。
我的查询是存储内部数据的格式
以及我可以从中获得相同理论值的任何算法?

最佳答案

正如这里的回答:

equivalence statements in fortran

两个值之间没有转换。它根据您写入变量的内容进行存储,并根据您访问它的方式进行解释。所以如果你写信给 REAL一个实值,然后尝试打印整数变量,你会得到垃圾。反之亦然。

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

关于fortran - 等价陈述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8584236/

相关文章:

c - 使用fortran 90读取C未格式化的二进制文件

string - 从字符串中提取单个 unicode 字符

fortran - Fortran 语言中 (/.../) 的含义是什么

c - 生成由编译器定义的预处理器宏列表

c++ - 从 C++ 拦截 Fortran STOP

arrays - FORTRAN 95,数组必须有恒定的形状错误

error-handling - 我使用 Simply Fortran,但不能在那里包含模块

fortran - 新的 gfortran 编译器无法编译旧的 gfortran 程序

matlab - Fortran 的 mex 网关中 REAL 变量的可移植声明

format - 从fortran中的数据文件中读取列