Имам функция за конвертиране на fp16 в fp32
static float fp16_to_fp32(const short in){
signed int t1, t2, t3;
float out = 0;
t1 = (in & 0x7fff) << 13 + 0x38000000;
t2 = (in & 0x8000) << 16;
t3 = in & 0x7c00;
t1 = (t3==0 ? 0 : t1);
t1 |= t2;
*((unsigned int*)&out) = t1;
return out;
}
грешка: дереферирането на въведен-набит указател ще наруши правилата за стриктно псевдоним [-Werror=strict-aliasing] в ((unsigned int)&out) = t1;< /em>
Как мога да разреша това? (не може да промени типа на аргумента in
)
char
указатели или масиви като междинна стъпка (напр - person Some programmer dude   schedule 20.04.2021sizeof(short)
? - person MikeCAT   schedule 20.04.2021in
вместоt1
. Във всеки случай вашият отговор обхваща всичко. - person Nate Eldredge   schedule 20.04.2021_cvtsh_ss
и свързаните с него вътрешни елементи - person harold   schedule 20.04.202113 + 0x38000000
бита наляво... приличен компилатор ще ви каже толкова много. - person Lundin   schedule 20.04.2021