如果我要使用嵌套括号来计算多项式,单独声明每个常量和将它们声明为数组之间有区别吗?
例如,之间有区别
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]
P1
和P2
是常数,但是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/