Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本FORTRAN函数错误_Fortran_Gfortran_Fortran95 - Fatal编程技术网

基本FORTRAN函数错误

基本FORTRAN函数错误,fortran,gfortran,fortran95,Fortran,Gfortran,Fortran95,我不熟悉Fortran。我正面临一个奇怪的问题,我不知道如何解决这个问题。我已经粘贴了最低工作代码来演示下面的问题 在代码中,除了余弦函数调用之外,其他所有功能都正常工作。它给出了错误的结果。最奇怪的是,如果我取消注释下面的注释行(与返回值无关),结果会发生变化 (正如我在几个SO问题中读到的,这看起来像是无效内存访问的结果,但无法找出任何答案) 更新: 运行发布的代码会得到以下结果 24.000000000000000 5.0000000000000000

我不熟悉Fortran。我正面临一个奇怪的问题,我不知道如何解决这个问题。我已经粘贴了最低工作代码来演示下面的问题

在代码中,除了
余弦
函数调用之外,其他所有功能都正常工作。它给出了错误的结果。最奇怪的是,如果我取消注释下面的注释行(与返回值无关),结果会发生变化

(正如我在几个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]