python中非常大的浮动的底部

python中非常大的浮动的底部,python,python-3.x,math,floor,Python,Python 3.x,Math,Floor,因为Python对整数没有限制,但对浮点数有一些限制。 我如何计算非常大的浮体的底板 我试图计算floorA*B,其中A是一个小无理数,可能是sqrt2、e、sqrt5等,B是一个范围为10^1000的非常大的数。您可以使用模块: 还可以使用getcontext.prec设置小数的精度,以获得更精确的结果 >>> from decimal import * >>> getcontext().prec = 100 >>> d1 = Decima

因为Python对整数没有限制,但对浮点数有一些限制。 我如何计算非常大的浮体的底板

我试图计算floorA*B,其中A是一个小无理数,可能是sqrt2、e、sqrt5等,B是一个范围为10^1000的非常大的数。

您可以使用模块:

还可以使用getcontext.prec设置小数的精度,以获得更精确的结果

>>> from decimal import *
>>> getcontext().prec = 100
>>> d1 = Decimal(2).sqrt()
>>> d1
Decimal('1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573')

64位浮点值不会超过~10^308。所以你的10^1000肯定不适合,不管乘以任何常数。任何64位浮点都不能小到使10^1000小于10^308。所以你的程序对浮动不起作用

考虑使用十进制模块。例如:

import decimal
import math
a = decimal.Decimal("10") ** 10000
b = decimal.Decimal("0.123")
math.floor(a*b)

为什么要使用小数点而不是小数点如果挑战在于计算floorA*B的准确值,那么这个答案无法解决问题,因为在sqrt2步骤中精度会丢失,之后不会恢复。感谢@Leon和@Andrew Gelnar的评论,更新代码。小数点1.1*小数点123456789123456789123456789这不是正确答案小数点1/7=0.142857142857142849212692681248881854116916656494140625,但应重复0.142857。调整getcontext.prec无法修复此问题。
import decimal
import math
a = decimal.Decimal("10") ** 10000
b = decimal.Decimal("0.123")
math.floor(a*b)