0

此代码返回错误“二进制表达式双精度和双精度操作数无效”

double staticDouble[3] = {1,2,3};
double dynamicDouble[3] = {a, b, c};
double resultTest = static * dynamic;
NSLog(@"%f",resultTest);

我想做的是将1乘以a,2乘以b,3乘以c。abc 是从文本字段中获取的双精度值。我应该如何正确地做到这一点?

4

1 回答 1

4

问题是staticanddynamic是数组,并且没有*数组的运算符;仅适用于“算术”类型。(另外,命名数组static是一个问题,但为了回答您实际提出的问题,我将忽略它)。

两种选择:一次计算一个产品:

double resultTest[3];
for (int i=0; i<3; ++i) resultTest[i] = static[i] * dynamic[i];

或调用对向量进行操作的库函数;例如在 iOS 或 OS X 上,您可以这样做(您还需要链接到 Accelerate 框架):

#include <Accelerate/Accelerate.h>

...

double resultTest[3];
vDSP_vmul(static, 1, dynamic, 1, resultTest, 1, 3);

(这对于大小为 3 的数组来说有点矫枉过正;如果您要专门处理这样的小数组,您可能需要定义自己的函数或使用针对固定大小的小型向量操作的库,例如 GLKit)。

你会在打印结果时遇到同样的问题;没有格式字符串来打印数组的内容,因此您需要一次打印一个元素:

for (int i=0; i<3; ++i) NSLog(@"%f ", resultTest[i]);
于 2013-01-04T21:02:39.447 回答