将uint8值转换为规范化浮点数是非常直接的:
uint8 i = 0xAF;
float f = float(i)/float(0xFF);但这感觉比它应该要贵..。
有没有更有效的方法让这个转换更有效?我问这个问题主要是出于好奇,但也是因为我的3D程序使这种转换有了很多次。
可读性并不重要,而且uint8总是跨越整个范围
0 == 0.f和255 == 1.f
发布于 2016-01-24 18:15:59
下面是我看到的操作:
在编译时:
在运行时:
i转换为浮点并存储在临时变量(或寄存器)中。i浮点值。f。瓶颈:
瓶颈在部门。除法需要很长的时间和时间(不管它是如何实现的)。
下一个主要瓶颈可能是整数到浮点数的转换。有些处理器可能有执行此操作的单一指令;否则将执行软件功能(通常比除法更快)。
优化:
备注:
发布于 2016-01-24 18:24:05
如果您关闭编译器严格的混叠规则,下面是一些在公共平台上可以做您喜欢的事情的肮脏技巧:
float tofloat(uint8_t x) {
uint32_t foo = 0x3f800000 + x * 0x8080;
return (float &)foo + 256 - 257;
}
float tofloat(uint8_t x) {
uint32_t foo = 0x3f800000 + x * 0x8080 + (x+1) / 2;
return (float &)foo - 1;
}https://stackoverflow.com/questions/34978843
复制相似问题