整数运算实现四舍五入

在进行除法运算时难免会遇到四舍五入的问题,如果使用整数运算可能误差较大,因为纯整数运算会把整数部分全舍去,如果使用浮点运算,则会增加运算量,特别是运算量比较大的算法中或在移动设备和移动设备这些资源比较紧张的应用上,这种开销是值得考虑的。下面代码就是使用整数运算实现四舍五入的一个例子

c = (b + (a >> 1)) / a;

这里a >> 1就是a的一半,这样就像当于只要b/a的余数大于a的一半,则再加上a的一半刚好入,否则就舍去,通过加法实现了四舍五入,这样比使用浮点数的效率高出一倍,以C#为例,下面为测试代码:

static void Main(string[] args)
		{
			int a = 100, b = 199, c;

			const int repeat = 1000000;
			const int loops = 100;
			double totalA = 0;
			double totalB = 0;

			for (int n = 0; n < loops; ++n) {
				DateTime begin = DateTime.Now;
				for (int i = 0; i < repeat; ++i) {
					c = (b + (a >> 1)) / a;
				}
				DateTime end = DateTime.Now;
				totalA += (end - begin).TotalMilliseconds;

				begin = DateTime.Now;
				for (int i = 0; i < repeat; ++i) {
					c = (int)Math.Round((double)b / a);
				}
				end = DateTime.Now;
				totalB += (end - begin).TotalMilliseconds;
			}
			System.Console.WriteLine("Integer used (ms): " + totalA / loops);
			System.Console.WriteLine("Double used (ms): " + totalB / loops);

			Console.ReadKey();
		}

运行结果:

	Integer used (ms): 9.67055
	Double used (ms): 21.071208

发布了311 篇原创文章 · 获赞 225 · 访问量 84万+

猜你喜欢

转载自blog.csdn.net/Nocky/article/details/7748887