具有可配置的工作精度的功能.
program vierkantsvergelijking
implicit none
integer, parameter :: dp = kind(0.d0)
integer, parameter :: sp = kind(0.0)
print *, algoritme1(-5771.,2.,dp)
contains
function algoritme1(b,c,wp) result( solution)
integer :: wp ! working precision
real(kind=wp) :: b,c,D
real(kind=wp), dimension(2) :: solution
D = sqrt((b/2)**2 - c)
solution(1) = -b/2 + D
solution(2) = -b/2 - D
end function algoritme1
end program
Run Code Online (Sandbox Code Playgroud)
我得到:错误:在(1)的参数'b'中键入不匹配; 将REAL(4)传递给UNKNOWN
为什么这不起作用,我怎样才能实现目标?
是的,或者说不是,这不会起作用,也不会起作用.英特尔Fortran编译器抱怨,关于这一行:
real(kind=wp) :: b,c,D
Run Code Online (Sandbox Code Playgroud)
那
A kind type parameter must be a compile-time constant. [WP]
Run Code Online (Sandbox Code Playgroud)
它也有同样的抱怨real(kind=wp), dimension(2) :: solution
.这是Fortran的根深蒂固的特征.
要做你想做的事,你必须沿着这些方向定义一个通用接口
interface algoritme1
procedure :: algoritme1_sp, algoritme1_dp
end interface
Run Code Online (Sandbox Code Playgroud)
并为这两个程序编写代码.然后编译器可以确定函数签名调用哪一个; 可能会有一个sp
论点,其他dp
论点.
您可能会认为这一切都意味着Fortran不会执行通用程序,我会将这个问题留给诡辩者和语言挑剔者.搜索周围是值得的generic programming in Fortran
; 即使在这里,有关于如何更好地避免编写程序员认为(与编译器不一致)的多个实现是"相同"代码的技巧和提示.
归档时间: |
|
查看次数: |
322 次 |
最近记录: |