gpt4 book ai didi

fortran - 创建一个接受不同种类实数的子程序

转载 作者:行者123 更新时间:2023-12-01 10:49:00 26 4
gpt4 key购买 nike

我想实现一个可以处理单精度、 double 和扩展精度实数的子例程。我能想出的唯一解决方案如下面的代码所示。此解决方案有效,但我必须将代码复制 3 次。可以避免这种代码重复吗?

module mymodule
....
! some code here

interface my_func
module procedure my_func_sp
module procedure my_func dp
module procedure my_func_ep
end interface

contains
subroutine my_func_sp(x,y)
real(kind=sp), dimension(:) :: x,y

... LONG IMPLEMENTATION HERE ...

end subroutine

subroutine my_func_dp(x,y)
real(kind=dp), dimension(:) :: x,y

... LONG IMPLEMENTATION HERE THAT IS EXACTLY THE SAME AS ABOVE ...

end subroutine


subroutine my_func_ep(x,y)
real(kind=ep), dimension(:) :: x,y

... LONG IMPLEMENTATION HERE THAT IS EXACTLY THE SAME AS THE TWO ABOVE ...

end subroutine
end module

最佳答案

可以避免这种代码重复吗? 不一定,这就是 Fortran 的工作方式。你可以:

  1. 为您关心的最高精度类型编写一次代码,然后让其他子例程调用该变体,在进出过程中转换变量种类。
  2. 我经常看到的另一种方法是将计算语句写在一个文件中,然后在每个子例程中包含该文件。请注意包含的语句对所有类型都有效。还要注意相同的语句适用于各种类型。例如,如果您包含的行包括与公差的比较,就像许多数字代码所做的那样,您可能必须特别注意根据类型调整公差。

关于fortran - 创建一个接受不同种类实数的子程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22765178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com