【发布时间】:2013-07-05 21:06:00
【问题描述】:
对于复数数组,a *= b 运算是否有乘法版本?
换句话说,将复数数组(大量元素或未知长度)的所有元素相乘并将结果存储在复数双精度变量中的最有效方法是什么?
在下面的代码中,Ans1 提供了正确答案,但是,对于我的应用程序来说,处理数组的每个元素是没有意义的,因为会有数百个元素。理想情况下,我想要一个循环(类似于Ans2)将数组的所有元素相乘并存储答案。如果我不将Ans2 初始化为1.0,1.0,则答案将是0,0,因为元素将乘以0。但是,使用1.0,1.0 进行初始化也不起作用,因为我们正在处理复数。
编辑 - 我不能手动处理每个元素的原因是因为这将链接到一个更大的程序,其中数组 a 的元素将来自其他地方,a 的长度会有所不同。
最好是ANSWER = COMPLEX ELEMENT[0]*COMPLEX ELEMENT[1]*COMPLEX ELEMENT[2]*....COMPLEX ELEMENT[n]
/*
Complex Array Multiplication
*/
#include <complex>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n = 3;
complex<double> Ans1, Ans2(1.0,1.0);
complex<double> a[n];
a[0] = complex<double>(1.0, 1.5);
a[1] = complex<double>(-1.0, 1.5);
a[2] = complex<double>(1.0, -1.5);
Ans1 = (a[0]*a[1]*a[2]);
cout << "\nAns1 = " << Ans1;
for (int i =0; i < n; i++) {
Ans2 = Ans2 * a[i];
}
cout << "\nAns2 = " << Ans2;
getchar();
}
也许这可以很容易地完成,但我错过了一些东西。提前致谢。
【问题讨论】:
-
乘以“数百”个复杂值对今天的计算机来说实际上并不是一个挑战……
-
“对于我的应用程序来说,处理数组的每个元素是没有意义的,因为会有数百个”你是在打孔卡上写这个程序吗?
-
是的,但是必须像我为 Ans1 所做的那样手动键入每个元素可能不是使用当今计算机的最有效方式。我刚刚创建了数组 A 来填充值,但我的应用程序的值将来自其他地方。
标签: c++ complex-numbers