python实现无限精度除法运算

python实现无限精度除法运算

原创 2013年11月23日 17:38:11

 

python3的int支持超大数的乘法运算,但是除法运算貌似还没有实现无限精度。对于浮点数乘法可以扩大转换为整数,运算完毕以后再缩小保存为str,即可实现高精度,但是对于除法,这种方法貌似行不通。

通过思考手算除法的过程,以a/b=c余r为例,过程如下:

1.a = r*10

2.计算a/b,结果为c余r

3.把c写在已经计算出来的结果后面

4.重复1~3步,直到想要的精度

用python实现,代码如下:

 

def hdiv(dividend, divisor, precision=0):  
    """高精度计算除法,没有四舍五入 
     
    @author: cidplp 
     
    @param dividend:被除数 
    @type dividend:int 
    @param divisor:除数 
    @type divisor:int 
    @param precision:小数点后精度 
    @type precision:int 
    @return:除法结果 
    @rtype:str 
    """  
      
    if isinstance(precision, int) == False or precision < 0:  
        print('精度必须为非负整数')  
        return  
      
    a = dividend  
    b = divisor  
      
    #有负数的话做个标记  
    if abs(a+b) == abs(a) + abs(b):  
        flag = 1  
    else:  
        flag = -1      
      
    #变为正数,防止取模的时候有影响  
    a = abs(a)  
    b = abs(b)  
  
    quotient = a // b  
    remainder = a % b  
      
    if remainder == 0:  
        return quotient  
      
    ans = str(quotient) + '.'  
  
    i = 0  
    while i < precision:  
        a = remainder * 10  
        quotient = a // b  
        remainder = a % b   
        ans += str(quotient)  
        if remainder == 0:  
            break  
        i += 1  
      
    if precision == 0:  
        ans = ans.replace('.', '')  
      
    if flag == -1:  
        ans = '-' + ans  
      
    return ans

 

 
posted @ 2018-01-10 15:49  汉学  阅读(2632)  评论(0编辑  收藏  举报