基本FORTRAN函数错误
我不熟悉Fortran。我正面临一个奇怪的问题,我不知道如何解决这个问题。我已经粘贴了最低工作代码来演示下面的问题 在代码中,除了基本FORTRAN函数错误,fortran,gfortran,fortran95,Fortran,Gfortran,Fortran95,我不熟悉Fortran。我正面临一个奇怪的问题,我不知道如何解决这个问题。我已经粘贴了最低工作代码来演示下面的问题 在代码中,除了余弦函数调用之外,其他所有功能都正常工作。它给出了错误的结果。最奇怪的是,如果我取消注释下面的注释行(与返回值无关),结果会发生变化 (正如我在几个SO问题中读到的,这看起来像是无效内存访问的结果,但无法找出任何答案) 更新: 运行发布的代码会得到以下结果 24.000000000000000 5.0000000000000000
余弦
函数调用之外,其他所有功能都正常工作。它给出了错误的结果。最奇怪的是,如果我取消注释下面的注释行(与返回值无关),结果会发生变化
(正如我在几个SO问题中读到的,这看起来像是无效内存访问的结果,但无法找出任何答案)
更新: 运行发布的代码会得到以下结果
24.000000000000000
5.0000000000000000
0.67882250993908555
在取消注释当前注释行后运行该程序,会得到以下结果:
24.000000000000000
5.0000000000000000
0.39191835884530846
这些都不是真的。预期结果为
0.96
(由24/(5*5)给出)
您的问题是,除非优化生效,否则gfortran不会检测到您的错误:
D:\gfortran\clf\uninit>gfortran -O2 uninit.f90 -ouninit
D:\gfortran\clf\uninit>gfortran -Wall uninit.f90 -ouninit
uninit.f90:31:28:
double precision :: na
1
Warning: Unused variable 'na' declared at (1) [-Wunused-variable]
D:\gfortran\clf\uninit>gfortran -O2 -Wall uninit.f90 -ouninit
uninit.f90:31:28:
double precision :: na
1
Warning: Unused variable 'na' declared at (1) [-Wunused-variable]
uninit.f90:17:0:
inner_product = inner_product + V1(i)*V2(i)
Warning: '__result_inner_product' is used uninitialized in this function [-Wunin
itialized]
这是您希望gfortran检测的最后一个错误。什么是错误的结果?结果是什么?您希望得到什么样的结果?为什么您使用自己的
内积
而不是内积dot\u产品
?你自己的norm
而不是内在的norm2
?另外,使用假定形状数组,您可以避免显式传递N
。我已使用观察到的输出和预期输出更新了问题。我不能使用内置函数,因为这是一个家庭作业:)好的,我不会让我的学生在现代Fortran中以这种方式学习使用假定大小的数组。哇,我觉得太愚蠢了:(.我在使用内部产品时没有初始化它。谢谢。
D:\gfortran\clf\uninit>gfortran -O2 uninit.f90 -ouninit
D:\gfortran\clf\uninit>gfortran -Wall uninit.f90 -ouninit
uninit.f90:31:28:
double precision :: na
1
Warning: Unused variable 'na' declared at (1) [-Wunused-variable]
D:\gfortran\clf\uninit>gfortran -O2 -Wall uninit.f90 -ouninit
uninit.f90:31:28:
double precision :: na
1
Warning: Unused variable 'na' declared at (1) [-Wunused-variable]
uninit.f90:17:0:
inner_product = inner_product + V1(i)*V2(i)
Warning: '__result_inner_product' is used uninitialized in this function [-Wunin
itialized]