0

このコードはエラーを返します'バイナリ式doubleおよびdoubleへの無効なオペランド'

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は、テキストフィールドからフェッチされたdouble値です。これを適切に行うにはどうすればよいですか?

4

1 に答える 1

4

問題は、staticdynamicが配列であり、*配列の演算子がないことです。「算術」タイプの場合のみ。(また、名前付きの配列を持つことstaticは問題ですが、実際に尋ねた質問に答えるために、それを無視します)。

2つのオプション:製品を一度に1つずつ計算します。

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などの小さな修正サイズのベクトル演算を対象とするライブラリを使用することをお勧めします)。

結果の印刷でも同じ問題が発生します。配列の内容を出力するためのフォーマット文字列がないため、要素を一度に1つずつ出力する必要があります。

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