0

我在将 float8 var 转换为 double8 以用于 openCL 中的 sincos 函数时遇到问题。所以我尝试了以下方法:

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

有谁知道为什么/如何正确投射它?

谢谢。

4

1 回答 1

1

在您的第一个代码示例中,&c是 type float8*,即它是指向一个float8值的内存地址。您不能使用convert_double将此地址转换为指向的指针double8sincos在此上下文中,这是它的第二个参数所期望的)。我想不出任何合理的方式来解决这个问题。

您必须显式创建正确类型的临时变量:

float8 a,b,c;
double8 c_double;
a = convert_float8(sincos(convert_double8(b), &c_double));
c = convert_float8(c_double);
于 2012-09-14T18:04:37.167 回答