我正在尝试在 16 位短变量中存储 32 位浮点值来节省内存和时间消耗。为了做到这一点,我引入了这样的转换函数:
typedef short int StoreType;
StoreType FloatToShort( float x ) { return x/k; }
float ShortToFloat( StoreType x ) { return float(x)*k; }
然后我使用第一个函数将输入数据转换为 StoreType 数组。每次我需要一些值时,我都会提取 StoreType 数据并使用第二个函数获取浮点值。
但是当我想估计由于内存优化而选择的加速选项并比较两种情况时:
- 如上所述 - 当 StoreType == short int
- 完全相同,但 StoreType == float (第一行替换为 "typedef short int StoreType" )。
我看到,在第二种情况下,时间明显更小(当测量误差小于 1% 时为 10%),尽管我有所有的预期(计算相同,现金使用量更大,浮动更大)。同时我的算法速度理论上不应该依赖于可怕的计算结果(即精度)。并且程序的最终结果几乎不会随着 StoreType 的变化而改变(差异小于 0.2%)。该程序还包括许多具有转换值的计算,因此与所有计算相比,类型转换时间预计可以忽略不计。
程序如何使用浮点数更快?