作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在if语句中对targets
的两次赋值会抛出如下错误
error: expression must have integral or enum type
操作中的所有变量都是或返回浮点值,因为它们被声明为浮点值。但它不喜欢转换为整数。为什么是这样?不同种类的 float 或整数之间有区别吗?
__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
}
}
最佳答案
在 targets[i + MAX_TARGETS*0]
和 targets[i + MAX_TARGETS*1]
中,您使用的是 i
float
。这使得计算数组索引的整个表达式成为 float
。你不能这样做,因为数组索引必须是整数类型(没有元素 4.5)。
如果你想保持 i
为 float
,你需要将它强制转换/转换为 `integer 类型,或者将表达式的结果强制转换/转换为整数类型。
关于c++ - Cuda, device, expression 必须有整型或枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51479660/
我是一名优秀的程序员,十分优秀!