Arrays 双精度阵列误差

Arrays 双精度阵列误差,arrays,fortran,precision,fortran90,Arrays,Fortran,Precision,Fortran90,我正在尝试运行一个数学算法(共轭梯度法)的代码。在这样做的过程中,我输入了一个双精度矩阵,在我的前言中定义了这样的矩阵。编译时,出现以下错误: A=RESHAPE((/ 0,8,0,4,26,8,0,17.5,0,0,0,17.5,0,2.5,-8,4,0,2.5,0,-5,26,0,-8,-5,0 1 Error: Element in INTEGER(4) array constructor at (1) is REAL(4) make: F

我正在尝试运行一个数学算法(共轭梯度法)的代码。在这样做的过程中,我输入了一个双精度矩阵,在我的前言中定义了这样的矩阵。编译时,出现以下错误:

A=RESHAPE((/ 0,8,0,4,26,8,0,17.5,0,0,0,17.5,0,2.5,-8,4,0,2.5,0,-5,26,0,-8,-5,0 
                        1
Error: Element in INTEGER(4) array constructor at (1) is REAL(4)
make: FTranProjectBuilder: Error: Execution exited with code 2 
*** [cg_main.o] Error 1
我在程序中定义的矩阵如下所示(数组定义是我程序的第一个操作):


该代码在矩阵输入中没有十进制数的情况下工作,但似乎与我的十进制数不匹配,我也不知道为什么。

前面的答案是错误的,标准非常清楚如何处理数组构造函数。请参见Fortran 2008 C4103

问题形式的数组构造函数中的所有元素必须具有相同的声明类型和相同类型的类型参数。编译器在这里抱怨,因为将实数表达式与这些整数表达式混合在一起违反了此约束

仅仅将第一个元素设置为实/双精度元素是不够的。可能编译器使用了关于“
integer(4)
array构造函数”的错误消息作为“第一个元素是
integer(4)
,但并非所有其他元素都是”的缩写

要解决这个问题,使用这种形式的数组构造函数,您应该使所有元素都具有相同的类型/种类(可能是实精度/双精度)

正如在另一个答案中(正确地)所述,数组构造函数还有另一种形式:

[ real ::0,8,0,4,26,8,0,17.5,0,0,0,17.5 ... ]
将所有元素转换为指定的类型。您甚至可以使用此表单创建大小为零的数组:

 [ real :: ]
 [ real :: ]