整数运算实现四舍五入
2012-07-15 16:44
579 查看
在进行除法运算时难免会遇到四舍五入的问题,如果使用整数运算可能误差较大,因为纯整数运算会把整数部分全舍去,如果使用浮点运算,则会增加运算量,特别是运算量比较大的算法中或在移动设备和移动设备这些资源比较紧张的应用上,这种开销是值得考虑的。下面代码就是使用整数运算实现四舍五入的一个例子
这里a >> 1就是a的一半,这样就像当于只要b/a的余数大于a的一半,则再加上a的一半刚好入,否则就舍去,通过加法实现了四舍五入,这样比使用浮点数的效率高出一倍,以C#为例,下面为测试代码:
运行结果:
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
相关文章推荐
- 用WebService实现两个整数运算
- Java中异或运算实现两个整数的交换以及其功能函数实现
- 超长整数的基础运算 算法实现之准备篇
- C语言,用数组实现结果为100000位内的大整数幂运算。
- 我的C实践(3):用宏和位运算来实现整数集合
- 只用位运算实现整数的加减乘除运算
- 用位运算实现两个整数的加法运算
- 超长整数的基础运算 算法实现自平方篇
- 实用算法实现-第 24 篇 高精度整数运算
- js中小数向上取整数,向下取整数,四舍五入取整数的实现。
- 实现整数的乘法、减法和除法运算,只允许使用加号
- 我的C实践(3):用宏和位运算来实现整数集合
- Large number arithmetic and DH algorithm(大整数的运算与DH算法的实现)
- 位运算实现两个整数的加法运算
- 位运算之美——用+,-和位运算实现正整数除法和取模(一)
- 实现任意长的整数进行加法运算的演示程序
- 位运算之美——用+,-和位运算实现正整数除法和取模(二)
- 计算器C#代码(实现整数的四则运算)
- C语言实现大整数运算
- 第8章-任务4-实现分数类中的运算符重载(分数与整数运算)