>>> int(1.0 * 10) * 10**999 # divide off 10**690 later or note in units
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>>> int(1.0 * 10**10) # multiply by 10**300 later or note in units
10000000000
>>> a = Decimal(10**310) * Decimal(1.0)
>>> b = Decimal(1)
>>> a + b - a
Decimal('0E+283')
进一步的例子
>>> a = Decimal(10**310)
>>> b = Decimal(0.1)
>>> a + b - a
Decimal('0')
>>> a
Decimal('10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000')
>>> b
Decimal('0.1000000000000000055511151231257827021181583404541015625')
您想使用
decimal
模块:结果:
如果可以的话,不要使用浮点值;它们很难推理,会咬你的
每当你尝试使用浮点,特别是那些有大量数字的浮点时,你应该考虑如何将它转换成整数范围,如果你的值的浮动部分超出了/P>>的无效或不必要的精度。
int
,如10**400
或10**100000
,这应该为浮点数字提供足够的空间,同时允许您在整数空间中工作实际上,这就是为什么你需要科学记数法——如果你不需要的话,不要存储数据及其所有数字,保留你需要的最小数量和第二个乘数作为大小因子(科学记数法确实使用浮点,但对于整数的想法是一样的)
然后,您可以在完成数学运算(甚至将它们单独相乘)后回忆起乘法器,而不是使用浮点运算
甚至可以以某种常规方式完全删除大部分数字,并在使用数据的人或任何人的后计算单位中显示系数
虽然这个问题是关于大数字的,但不幸的是,即使是
decimal.Decimal
也不能像人们所期望的那样处理小的浮点位,因为它们在存储方式上存在一些别名https://en.wikipedia.org/wiki/Floating-point_arithmetic#IEEE_754:_floating_point_in_modern_computers
这对于普通的python浮动是有问题的,因此扩展到了
Decimal
,甚至是您在正常使用中可能看到的大小改编自Which is the first integer that an IEEE 754 float is incapable of representing exactly?
原问题的例子
进一步的例子
相关问题 更多 >
编程相关推荐