为什么10/.01=999.0?

2024-04-20 12:59:28 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么不是1000?结果是float,因为PEP238中真除法'的'语义,但是math.float(999.999999999999999) = 1000。这让人困惑。我有一个假设,实际上答案是999.999999123564384,但是如何检查呢?顺便说一句


Tags: 答案语义mathfloatpep238
1条回答
网友
1楼 · 发布于 2024-04-20 12:59:28

0.1不是十分之一。你知道吗

浮点数是二进制近似值;正如十进制数是由1+2+4+8+16等的和表示的一样,浮点数是二进制分数的和,即1/2+1/4+1/8+1/16,在和中的每一个分数都有位开关。您只能近似十分之一,但当您用更多数字格式化值时,实际值就会变得明显:

>>> format(0.1, '.55f')
'0.1000000000000000055511151231257827021181583404541015625'

使用以下分数:

>>> fractions = []
>>> sum = 0.0
>>> for i in range(1, 56):
...     fraction = 2 ** i
...     if sum + (1.0 / fraction) <= 0.1:
...         fractions.append(fraction)
...         sum += 1.0 / fraction
... 
>>> fractions
[16, 32, 256, 512, 4096, 8192, 65536, 131072, 1048576, 2097152, 16777216, 33554432, 268435456, 536870912, 4294967296, 8589934592, 68719476736, 137438953472, 1099511627776, 2199023255552, 17592186044416, 35184372088832, 281474976710656, 562949953421312, 4503599627370496, 9007199254740992, 36028797018963968]

//给你一个除法,把1000乘以略大于1/10给你一个略小于的除法,这样就等于999。你知道吗

相关问题 更多 >