整数运算实现四舍五入

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值