你能把24**36除以2多少次,直到它变得不精确?我在蟒蛇课程的一次测验中提出了这个问题,我很想知道正确的答案是什么。(它已经提交了,所以这里没有作弊)
我在python中编写了一小部分代码来计算这个数字可以除以2的次数,直到它变成一个十进制数为止。
count = 0
remainder = 0
num = 24**36
while remainder == 0:
remainder = num % 2
if remainder == 0:
num /= 2
count += 1
print(count)我认为答案与浮点不精确有关,但我不确定什么是“不精确”。上面的代码打印113,因为到了113除法时,它将变成一个十进制数,最后是.5,我声称这个数字不精确。这个方法正确吗?
发布于 2022-10-28 15:06:30
从来没有使用浮点算术的整数值,特别是在Python!在其他语言中,您可能不得不对大值使用多精度库,但是Python整数是多精度整数.
现在24 ** 36 = (3 * 2 ** 3) ** 36 = (3 ** 36) * (2 ** 108)
所以你可以把它除以108乘以2,然后得到整数值。
在步骤109中,您将得到一个浮点值。如果你用Python问math.log2(3**36),你会得到57.058.这意味着它需要更多的IEE 754双精度浮点( Python浮点数是什么)的最大精度,因为它只有54位。
答案是108。
发布于 2022-10-28 15:03:50
n = 24**36
i = 0
while True:
a,b = divmod(n,2)
if a == 1:
break
if b > 0:
break
i += 1
n = a
print(i)我使用了内置的divmod,它返回除法和其余部分的结果。然后,我简单地循环,直到剩下的是1,同时计算i中的除数。
输出为108。
您甚至可以在没有代码的情况下计算这个值:
(24**36)
(2*12)**36 -> 36
(2*6)**36 -> 72
(2*3)**36 -> 108
3**36 -> not divisible by 2 without remainderhttps://stackoverflow.com/questions/74237146
复制相似问题