float32转float16
void Float32ToFloat16(uint16_t *result, float fp)
{
if (fp > FP16_MAX) {
(*result) = 0x7fff;
return;
} else if (fp < (-FP16_MAX)) {
*result = 0xffff;
return;
} else if (fp < FP16_MIN && fp > (-FP16_MIN)) {
*result = 0;
return;
}
uint32_t fpBit = 0;
int32_t ret = memcpy_s(&fpBit, sizeof(uint32_t), &fp, sizeof(float));
LOG_IF_FAIL(ret == 0, "Float32ToFloat16 memcpy_s error %d", ret);
uint32_t sign = ((fpBit >> 31) & 1);
uint32_t exponent = ((fpBit >> 23) & 0xff);
uint32_t fraction = ((fpBit >> 13) & 0x3ff);
while(exponent < 0x71) {
fraction >>= 1;
exponent += 1;
}
exponent -= 0x70;
*result = ((sign << 15) | (exponent << 10) | fraction);
return;
}
之前用了ChatGPT生成,经提醒似乎是错的,已更新


8246

被折叠的 条评论
为什么被折叠?



