首页 > 解决方案 > 尝试二进制搜索但十进制,浮点数使其不准确。为什么?

问题描述

尝试二进制搜索但十进制,浮点数使其不准确。为什么?

print('Enter your input:')
n = input()


def binarysearch(n):
        j = float(n)/2
        i = k = j/2
        while round(i,2)*round(i,2) != float(n):
                if round(i,2)*round(i,2) < float(n):
                        k = round(i, 2)
                        i += round(((j-i)/2),2)
                        round(i, 2)
                        print(i, 'less') # just for tracking
                if round(i,2)*round(i,2) > float(n):
                        j = round(i, 2)
                        i -= round(i/2,2)
                        round(i, 2)
                        print (i, 'more') # just for tracking

       return i


print (binarysearch(n))

输出 -

Enter your input:
9
3.00999999999998
3.37 less
1.6800000000000002 more
2.52 less
2.95 less
3.16 less
1.58 more
2.37 less
2.77 less
2.97 less
3.06 less
1.53 more
2.3 less
2.6799999999999997 less
2.8699999999999997 less
2.9699999999999998 less
3.0199999999999996 less
1.5099999999999996 more
2.2699999999999996 less
2.6499999999999995 less
2.8399999999999994 less
2.9299999999999993 less
2.979999999999999 less
2.999999999999999 less
2.999999999999999

Enter your input:
36
6.009999999999916
4.5 more
6.75 less
3.37 more
5.0600000000000005 less
5.9 less
6.32 less
3.16 more
4.74 less
5.53 less
5.930000000000001 less
6.120000000000001 less
3.060000000000001 more
4.590000000000001 less
5.3500000000000005 less
5.73 less
5.920000000000001 less
6.0200000000000005 less
3.0100000000000007 more
4.510000000000001 less
5.260000000000001 less
5.640000000000001 less
5.830000000000001 less
5.920000000000001 less
5.970000000000001 less
5.99 less
6.0 less
6.0

和不是平方根的数字,搜索将永远不会完成。

标签: python-3.x

解决方案


推荐阅读