Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        6年前关闭。
                                                                                            
                
        
我试图节省内存和时间,将32位浮点值存储在16位短变量中。为了做到这一点,我介绍了这样的转换函数:

typedef short int StoreType;
StoreType FloatToShort( float x ) { return x/k; }
float ShortToFloat( StoreType x ) { return float(x)*k; }


然后,我使用第一个函数将输入数据转换为StoreType数组。每次我需要一些值时,我都会提取StoreType数据并使用第二个函数来获取浮点值。

但是当我由于内存优化而要估计加速选项并比较2种情况时:


如上所述-当StoreType == short int时
完全相同,但StoreType == float(第一行由“ typedef short int StoreType”代替)。


我看到,尽管我有所有预期(尽管计算方法相同,但使用浮动货币时,现金使用量较大),但在第二种情况下,时间却明显较小(例如,当测量误差小于1%时为10%)。
同时,我的算法速度理论上不应依赖于令人恐惧的计算结果(即精度)。而且,随着StoreType的更改,该程序的最终结果几乎不会更改(相差小于0.2%)。
该程序还包含许多具有转换后值的计算,因此与所有计算相比,类型转换时间预计可以忽略不计。

使用浮点数的程序怎么可能更快?

最佳答案

在第一种情况下,您将执行浮点运算以及从floatshort int的转换(反之亦然)。

在第二种情况下,您具有相同的浮点运算,但是没有转换。除非我误解了您的问题,否则它就会更快。

关于c++ - 将float存储为short int。令人困惑的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19231688/

10-16 05:51