2012-09-14 65 views
0

我有一個問題,在openCL中爲sincos函數將float8 var轉換爲double8。所以我已經嘗試了以下內容:在openCL中的明確鑄造

float8 a,b,c; 

a = convert_float8(sin(convert_double8(a))); // worked 
a = convert_float8(sincos(convert_double8(b),convert_double8(&c))); // failed 

它會拋出一個openCL錯誤,說無法構建程序。起初我以爲sincos不會採用double8類型,但它也可以工作,如果我只是傳入double8 var,但是當我試圖將float8轉換爲double8時,它會像上面的代碼一樣失敗。

float8 a; 
double8 b,c; 

a = convert_float8(sincos((b),(&c))); //worked 

有誰知道爲什麼/如何正確施放它?

謝謝。

+0

我進行精密分析,這就是爲什麼我需要轉換的float8到double8然後回的float8的小費,並感謝,我會接受我的舊問題的一些答案。但回到主題,你有任何想法,爲什麼它不工作?這個例子很有意思,因爲這正是我需要執行的。 – overloading

+0

第二個代碼塊中的代碼不會爲我編譯。 'sincos'需要兩個參數,你只提供一個參數。你確定這段代碼有效嗎? – reima

+0

哦,對不起,這是我輸入它的錯誤。它應該是:a = convert_float8(sincos((b),(&c))); – overloading

回答

1

在您的第一個代碼示例中,&c的類型爲float8*,即它是指向float8值的內存地址。您不能使用convert_double將此地址轉換爲指向double8(這是sincos期望作爲此上下文中的第二個參數)的指針。我想不出任何明智的辦法。

你必須明確地創建正確類型的臨時變量:

float8 a,b,c; 
double8 c_double; 
a = convert_float8(sincos(convert_double8(b), &c_double)); 
c = convert_float8(c_double); 
+0

謝謝,它應該是一個很好的解決方案,讓我繼續分析 – overloading