【问题标题】:difference for fortran format between ifort and gnu fortranifort 和 gnu fortran 之间 fortran 格式的区别
【发布时间】:2020-11-13 08:31:06
【问题描述】:

我目前正在编写一个代码,据我所知,它可以很好地与 ifort 一起编译。 我尝试用 gfortran 编译它,但出现以下错误:

WRITE(100, '(8ES18.10E)') a
1 Error: Positive exponent width required in format string at (1)

我对这种格式感到困惑:8ES18.10E,最后一个 E 应该是什么意思? 是不是 ifort/gfortran 不兼容?

感谢您的建议

【问题讨论】:

  • 不确定,但可能格式中的第二个E 不应该出现。
  • 我认为 gfortran 在最后一个 E 之后拒绝没有一两个数字的格式是正确的。英特尔 Fortran 没有拒绝它并不让我感到惊讶,它只是可追溯到 60 年代的一长串编译器的最新版本。一路走来,它获得了许多非标准功能(或不再标准的功能),并且通过对向后兼容性的无限热情并没有放弃(m)其中任何一个,尽管明智地使用标志可以说服它成为在这方面更加无情。
  • 我想有人应该解释格式ES18.10E,以及为什么 gfortran 正确拒绝它。 18 是格式化数字的总宽度。 10 是小数点后的位数。尾随 E 需要一个整数值来指定指数中的位数。正如@HighPerformanceMark 所说,英特尔正在接受对 Fortran 标准的扩展。英特尔提供了一个请求符合 Fortran 标准的选项(请参阅其文档)。
  • ifort 接受作为扩展 ES18.10E 与其说它没有义务告诉你ES18.10E 不是有效的格式化项目。
  • 上面所有的 cmets 都是正确的,除了它不能被认为是扩展,因为它没有意义。至于 ifort 在运行时使用无效格式做什么,我的猜测是尾随的 E 将被忽略,但这需要在每个主要版本上进行测试。如果无法对其进行检查,那将是令人失望的,而问题报告将是合理的。在 ifort 中检查的任何级别的标准都应要求符合 f95。正如 francescalus 指出的那样,Fortran 标准不需要检查所有方面的合规性。

标签: fortran gfortran


【解决方案1】:

ifort 至少在我找到的示例中将 WRITE(100, '(8ES18.10E)') 解释为 WRITE(100, '(8ES18.10E2)') )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 2013-04-12
    • 2016-05-06
    • 2011-01-31
    • 2020-08-29
    • 2013-11-15
    相关资源
    最近更新 更多