CUDA имеет некоторые встроенные функции на стороне устройства для переинтерпретации интеграла как значений с плавающей запятой и наоборот:
float __int_as_float(int);
int __float_as_int(float);
double __longlong_as_double(long long);
long long __double_as_longlong(double);
почему, если все это, предпочтительнее использовать их над универсальным:
y = reinterpret_cast<T&>(x);
или даже язык C
y = *((T*)(&x));
?