董老师在硅谷 2017-10-11
一、概述
该算法由本人亲自实现,测试多次,未发现bug,可放心使用。大数的四则运算,利用数组存储数字,按位计算,基于java自带的四则运算。小数计算会转换为整数,再交由系统计算,可得到精确的小数计算。除法,内部自动扩充到>=16位小数,可改代码修改之。
优点:
1.超大数计算,可计算超过long类型,double类型的数据,最大长度不能超过int最大值2147483647,也就是21亿位十进制数字表示的数值。
2.精确小数计算,由于内部转换成整数,再交给cpu运算,可保证运算无误!
缺点:
1.运算速较自带的cpu慢
二、代码
工程源码可见:
部分核心代码可见上一篇博文。
三、运行
请输入第一个数: 0.1 请输入第二个数: 1.2 大数加法计算:0.1+1.2=1.3,cost time:0.396253ms 加法直接计算:1.3 大数减法计算:0.1-1.2=-1.1,cost time:0.327ms 减法直接计算:-1.0999999999999999 大数乘法计算:0.1*1.2=0.12,cost time:0.494589ms 乘法直接计算:0.12 大数除法计算:0.1/1.2=0.08333333333333333,cost time:2.716993ms 除法直接计算:0.08333333333333334 退出输入q,否则继续 请输入第一个数: -3 请输入第二个数: 2.5 大数加法计算:-3+2.5=-0.5,cost time:0.15413ms 加法直接计算:-0.5 大数减法计算:-3-2.5=-5.5,cost time:0.086134ms 减法直接计算:-5.5 大数乘法计算:-3*2.5=-7.5,cost time:0.082439ms 乘法直接计算:-7.5 大数除法计算:-3/2.5=-1.2,cost time:0.517707ms 除法直接计算:-1.2 退出输入q,否则继续 请输入第一个数: 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.55 请输入第二个数: 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.00 大数加法计算:1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.55+1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.00 =2469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780.55,cost time:0.521923ms 加法直接计算:2.4691357802469134E99 大数减法计算:1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.55-1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.00=0.55,cost time:0.670347ms 减法直接计算:0.0 大数乘法计算:1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.55*1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.00 =1524157875323883675049535156256668194500838287337600975522511812231126352691000152415888766956267752241275427206980753968983396521726871764655540387713839359896212468102104100021458695323270698064439.5000,cost time:3.161342ms 乘法直接计算:1.5241578753238836E198 大数除法计算:1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.55/1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.00=1,cost time:17.875937ms 除法直接计算:1.0 退出输入q,否则继续