【发布时间】:2017-12-12 07:22:17
【问题描述】:
我正在从事一个几年前开始的项目。最近,该小组中有一位新成员建议用通用的数学函数替换所有古老的类型特定形式的数学函数。例如,建议将cdexp(c) 和dexp(d) 都替换为exp(c) 和exp(d)。然而,另一位参与该项目多年的成员不愿意这样做,因为他认为dexp(d) 会仔细检查d 的类型,并确保我们不会意外地将复杂参数作为真实参数传递并产生错误就像下面的代码sn-p:
program main
real*8 :: a = 3.d0
real*8 :: b = 2.d0
complex*16 :: c = (7.d0, 8.d0)
a = b + exp(c)
write(6,*) a
end program main
对比
program main
real*8 :: a = 3.d0
real*8 :: b = 2.d0
complex*16 :: c = (7.d0, 8.d0)
a = b + dexp(c)
write(6,*) a
end program main
第一个会给出意想不到的结果,而第二个会在编译时给出错误,假设我们期望 c 是真实的,但可能不小心将一些复杂的东西传递给它。上面显示的是一个最小的示例,因此每个人都可以看到c 乍一看很复杂。实际情况比这复杂得多。
我的问题是,这种说法是否证明了使用古老的特定于类型的数学 Fortran 函数是合理的,还是我们应该真正听取建议并用更通用的函数替换特定于类型的函数?
我们将不胜感激。
我在发帖之前已经阅读了this question。那里的答案只是说过时的是过时的,一般可以自动处理参数类型。根本没有提到过时的形式对于双重检查类型很有用,并且允许在编译时发现一些错误。我认为这个问题的关注点与那个问题明显不同。
【问题讨论】:
-
我已经检查了可能重复的答案之前我发布了这个。我必须说,那里的答案并没有真正的帮助。
-
如果链接不能回答你的问题,请修改它,强调没有讨论的地方,这样我们就不必重复了。 总是参考一个相关的问题,如果你读过它,以防止这种情况发生。解释为什么它没有帮助。
-
不确定是什么问题,但这是对现在似乎已删除的评论的回应。我保留了此评论,因为它提供了有关该问题的更多信息。对不起,但我觉得它并不直截了当。我认为它确实提供了一定程度的类型安全(如果我错了请指出),但我不知道是否足以证明使用过时的函数是合理的,或者我们应该停止使用过时的函数,因为它们是过时的。您能否详细说明或提供链接以查找相关信息?谢谢
-
感谢您解释并重新提出问题。这很公平。
-
@VladimirF 确实你是对的,我已经删除了评论以避免混淆。
标签: fortran