CPU做除法要比乘法和移位慢很多,因此在有必要的时候,将除法进行一定的处理,将会提高程序的执行效率。
一个方法是利用编译器来做除法,如
#define PI 3.14159
r = cir_len / (2 * PI);
改为
#define Px (1/ (3.14159 * 2))
r = cir_len * Px;
由编译器预先计算好值,这样执行的时候就只是乘法,这个做法的缺点是不够灵活。对此进行改进。
因为 Y = X/N 等价于 Y = X * (1/N),而1/N = ((2 ^ M) / N)/(2 ^ M),即 ((2 << M) / N ) >> M,预先找出C = (2 << M ) / N,即可不太精确地将Y = X/N 变为 Y = (X * C) >> M
浙公网安备 33010602011771号