我試圖返回兩個向量的內積在.C中與R.此後,我希望函數返回true,如果內積等於零,否則返回false 。 我寫了一個小的.cpp函數來計算正確的內部產品。 當我有長度的矢量2 例如< - C(5,-5) b < - C(5,5)使用R和.C返回點積
此返回0作爲結果和真作爲結果等於零。
然而,當我增加在R調用代碼向量的長度 例如< - C(5,-5,4) b < - C(5,5,4)
它返回16作爲結果是很好的,但它返回的結果不等於零,這是不正確的 。
任何人都可以幫助理解我在這裏做錯了嗎?
該代碼是下面的.C
#include <R.h>
extern "C" {
void test(int * x1, int * x2, int * len, int * result, bool * tf)
{
int n = *len;
*result = 0;
for (int i = 0; i < n; i++)
{
*result = *result + x1[i] * x2[i];
if (*result == 0)
{
*tf = TRUE;
}
}
}
}
我已經改變這對代碼
#include <R.h>
extern "C" {
void test (int * x1, int * x2, int * len, int * result, int * tf)
// void test (int * x1, int * x2, int * result)
{
int n = *len ;
*result = 0;
for (int i = 0; i < n; i++)
*result += x1[i] * x2[i];
*tf = *result == 0;
}
}
,當我用R調用此,如下
a <- c(-5,5,4)
b <- c(5,5,3)
len <- length(a)
c <- 0
ans <- FALSE
.C("test", x1 = as.integer(a), x2 = as.integer(b),
len = as.integer(length(a)),
result = as.integer(c),
tf = as.logical(ans))
的輸出爲
$x1
[1] -5 5 4
$x2
[1] 5 5 3
$len
[1] 3
$result
[1] 12
$tf
[1] TRUE
由於結果不是0 tf應該是FALSE,它是當矢量長度爲1或2時。只有當我增加到3或更長時,這是否會發生。任何人都可以幫忙嗎?
您沒有將* tf設置爲FALSE。順便說一句,我沒有看到tf在任何地方定義。 – AndreiM
'tf'是什麼?它沒有在任何地方聲明。我假定它的函數的返回值(也沒有顯示),如果是這樣的話,以前的評論適用。另外,我認爲你想在for循環完成後檢查(* result == 0)**,而不是在執行期間。 – user2867342
@ user2867342是的,它被傳遞給函數。 –