fortran - 写出数组解决了一个我不知道的原因
问题描述
当我使用带有 GNU gfortran 编译器的 FORTRAN 77 运行某些程序时,我多次遇到同样的问题,我希望有人有见识。我想要的值应该是〜1,但它在程序结束时写出远远超过10 ^ 100。对我来说,这通常是仅限于数组的问题。当我之前在程序的某个阶段写出 this 的值时,不正确的值通常会消失(这在尝试解决问题时不可避免地会发生)。
我已经尝试显式初始化数组,并在我的程序中尝试了一些数组绑定检查以及一些内部逻辑检查。对我和我的研究主管来说,这个问题似乎是病态的。
WRITE(*,*)"OK9999", INV,INVV
对比
WRITE(*,*)"OK9999", INV,INVV,NP,I1STOR(NP),I2STOR(NP)
前者给出了我对变量 INV 和 INVV 的预期结果不正确,后者是正确的。这是这个问题的“最新”示例,它断断续续地影响了我大约一年。
这些行的更大背景是:
WRITE(*,*)"AFTER ENERGY",I1STOR(1),I2STOR(1)
DO 167 NP=1!,NV
IF(I1STOR(NP).NE.0) THEN
INV = I1STOR(NP)
INVV = I2STOR(NP)
WRITE(*,*)"OK9999", INV,INVV,NP,I1STOR(NP),I2STOR(NP)
PAUSE
ENDIF
I1STOR(1) 和 I2STOR(1) 在上面的第一种情况“AFTER ENERGY”中写得正确。如果我在 DO 167 行之后写出 NP 的值,这也将纠正这种情况。
我的期望是写出一个变量不会影响它的值。很多时候,我在做大量的、耗时的计算,最终值很遥远,在许多情况下,它可以追溯到将值写出(到屏幕或文件)神奇地缓解问题的情况。任何帮助将不胜感激。
解决方案
推荐阅读
- php - 如何将您从 api 获得的 slug 从希腊语更改为希腊语
- python - 有没有办法一次清除 2 个不同 CSV 的空数据?
- python - 使用python从json中搜索和提取特定数据
- oracle - 键入 sqlplus / as sysdba 什么也没有
- microsoft-graph-api - 如何在 Outlook 365 Web 插件中获取电子邮件的 .eml 或 base 64?
- flutter - 为什么 dio 4.0.0 不向服务器发送 http 请求
- node.js - 我如何只能从 MongoDB 打印今天的预订?
- mysql - 有没有办法检索以不同编码保存在数据库中的阿拉伯语数据?
- react-native - FlatList React Native:嵌套对象
- python - 如何每 5 分钟将某人静音 20 秒