组合数计算出现浮点误差的问题python

#首先组合数公式C(n,m)可以简单化简,例如C(8,5)=C(8,3)=(8*7*6)/(3*2*1),m或n-m为几,分式上下就有几
#个数。

def cni(n,i):#原函数
    minNI = min (i,n-i)#C(8,5)->C(8,3),减少下面循环次数
    result  = 1
    for j in range(0,minNI):
        print('(',result,'*',n -j,')/', minNI-j) #调试
        result =result*(n-j)/(minNI-j) #从最大项开始累乘
    return result

def cni1(n,i):#改正后
    minNI=min(i,n-i)
    result = 1
    for j in range(1, minNI+1):
        print('(',result,'*',n -minNI+j,')/', j)#从最小项开始累乘
        result = (result * (n -minNI+j)) /j#为了保证能够整除,先进行乘法后除
    return result


print('原函数:')
print(cni(8,5),end='\n\n')
print('修改后:')
print(cni1(8,5))

output-----------------------------------------
原函数:
( 1 * 8 )/ 3
( 2.6666666666666665 * 7 )/ 2
( 9.333333333333332 * 6 )/ 1
55.99999999999999

修改后:
( 1 * 6 )/ 1
( 6.0 * 7 )/ 2
( 21.0 * 8 )/ 3
56.0


猜你喜欢

转载自blog.csdn.net/qq_41033241/article/details/103384514
今日推荐