arrays - 初始化参数序列和参数数组之间有区别吗?

标签 arrays fortran

如果我要使用嵌套括号来计算多项式,单独声明每个常量和将它们声明为数组之间有区别吗?

例如,之间有区别

real(kind = c_double), parameter  :: &
            P0 =  .5,     &
            P1 =  .8,     &
            P2 = -.1,     &
            P3 = -.7,     &
            P4 = -.4,     &
            P5 = -.6, &
            P6 = -.2

并计算

x = ((((((P6 * a + P5) * a + P4) * a + P3) * a + P2) * a + P1) * a + P0)

real(kind = c_double), parameter, dimension(7)  :: P = &
[.5, .8, -.1, -.7, -.4, -.6, -.2]

并计算

x = ((((((P(7) * a + P(6)) * a + P(5)) * a + P(4)) * a + P(3)) * a + P(2)) * a + P(1))

最佳答案

是的,存在差异,但这些差异对于您在此处的使用并不重要。

差异来自于给出(与问题略有不同)声明的事实

real, parameter :: P1=0.1, P2=0.2, P(2)=[0.1,0.2]

P1P2是常数,但是P(1)P(2)不是。 P是一个常数,但这不是同一件事。所以,P1可以在某些情况下使用 P(1)不能。

但是,在诸如

之类的表达式中
((((((P6 * a + P5) * a + P4) * a + P3) * a + P2) * a + P1) * a + P0)

恒定的性质并不重要,P的元素在那里可以同样轻松地使用。

在复杂的文字常量和文字常量中的(对于整数)类型参数等情况下会出现差异。另外,与 P(1)作为一个数组元素,它可以以某些不适合 P1 的方式使用.

<小时/>

我会注意到该问题的一些具体内容:

  • 给出P0使用时,数组可以从 0 开始索引:real, parameter, dimension(0:6) :: P=[...] ;
  • 数组的一个优点是可以隐含元素数量(在当前的 Fortran 中,而不是 F90): real, parameter, dimension(0:*) :: P=[...]

关于arrays - 初始化参数序列和参数数组之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42057055/

相关文章:

c - 将整个数组传递给 C 中的函数

arrays - Julia 中的push!() 和append!() 方法的效率如何?

java - 递归随机枢轴排序的问题

C++ 数组和大小

garbage-collection - fortran 有垃圾收集器(gc)吗?

history - Fortran dim(x,y),到底是什么?

c - 将二维数组从 Fortran 传递到 C

loops - 如何在 Fortran 的 do 循环中跳过几次迭代

fortran - 以 '#' 开头和/或以 'c' 结尾的常量在 Fortran 中意味着什么?

javascript - 分割后的数据存入数组