首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >你能把24**36除以2多少次,直到它变得不精确?

你能把24**36除以2多少次,直到它变得不精确?
EN

Stack Overflow用户
提问于 2022-10-28 14:52:17
回答 2查看 60关注 0票数 0

你能把24**36除以2多少次,直到它变得不精确?我在蟒蛇课程的一次测验中提出了这个问题,我很想知道正确的答案是什么。(它已经提交了,所以这里没有作弊)

我在python中编写了一小部分代码来计算这个数字可以除以2的次数,直到它变成一个十进制数为止。

代码语言:javascript
运行
复制
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,我声称这个数字不精确。这个方法正确吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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。

票数 2
EN

Stack Overflow用户

发布于 2022-10-28 15:03:50

代码语言:javascript
运行
复制
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

您甚至可以在没有代码的情况下计算这个值:

代码语言:javascript
运行
复制
(24**36)
(2*12)**36  -> 36
(2*6)**36   -> 72
(2*3)**36   -> 108
3**36       -> not divisible by 2 without remainder
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74237146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档