float、double的计算是比较复杂的,尤其是软件计算,要比较指数,有效数字等,肯定是需要好几个汇编指令的。
浮点数的加法运算(不要问哥为啥只讲加法~)分为下面几个步骤:
对阶
位数求和
规格化
舍入
校验判断
因此总结以下几个方法:
1、1维数组比2维数组好
2、可以把小数转换为整数的乘除,乘法比除法快
3、乘除可以使用移位运算,但前提是2的N次方。同样,如果不是,可以进行通分转换为2的N次方,再进行近似计算
4、数组查表更加快
5、32位可是使用2给ALU,for循环中跨度为2,循环中做2次计算代替逐个计算
如下所示,
for (size_t i = 0; i < count; i+=2)
{
/* code */
a[i]=...;
a[i+1]=...;
}
for (size_t i = 0; i < count; i++)
{
/* code */
a[i]=...
}
6、缩短数据类型
7、将函数声明为inline,可以加快系统运行,但会增加内存空间,以空间换时间
8、数组放在高数缓存区(如果有的话)
9、可以用汇编来写