在if语句中
targets
的两个赋值处会抛出以下错误。error: expression must have integral or enum type
操作中的所有变量都是浮点值或返回浮点值,因为它们被声明为这样。 但是它不喜欢转换为整数。 为什么会这样? 不同类型的浮点数或整数之间有差异吗?
__global__
void generateTargets(int* targets, int targetAmount, float radius, float angleStep){
float i = blockIdx.x;
if(i < targetAmount){ // Ensure it stays in range
// Access the 1d array representation of the 2d array [MAX_TARGETS][2]
targets[i + MAX_TARGETS*0] = __float2int_rd(radius*__cosf(i*angleStep)); // X value
targets[i + MAX_TARGETS*1] = __float2int_rd(radius*__sinf(i*angleStep)); // Y value
}
}
angleStep
是一个float
,你可以将i
设为int
,它会自动转换为float
。这可能是最快和最简单的解决方案。 - NathanOliverblockIdx
是什么,blockIdx.x
中的x
是什么类型? - NathanOliverblockIdx.x
是一个整数,至少我认为它没有任何小数部分。所以答案很好。谢谢你的关心。 - Johan Sundmanfloat i = blockIdx.x;
替换为int i = blockIdx.x;
,这样你就只需要进行一次类型转换(整数/浮点数之间的转换是昂贵的)。 - Benjamin Barrois