在 python 中漂浮着非常大的地板
Floor of very large floats in python
因为 Python 对整数没有限制,但对浮点数有一些限制。
我该如何计算非常大的浮点数的底数?
我正在尝试计算 floor(A*B),其中 A 是一个小的无理数,可能是 sqrt(2)、e、sqrt(5) 等,B 是 10^1000 范围内的一个非常大的数.
您可以使用 decimal 模块:
>>> from decimal import Decimal
>>> from math import floor, sqrt
>>>
>>> d1 = Decimal(sqrt(2))
>>> d2 = Decimal(10**1000)
>>>
>>> result = d1 * d2
>>> floor(result)
您还可以使用 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。)所以你的程序不适用于浮点数。
考虑使用 decimal
模块。例如:
import decimal
import math
a = decimal.Decimal("10") ** 10000
b = decimal.Decimal("0.123")
math.floor(a*b)
因为 Python 对整数没有限制,但对浮点数有一些限制。 我该如何计算非常大的浮点数的底数?
我正在尝试计算 floor(A*B),其中 A 是一个小的无理数,可能是 sqrt(2)、e、sqrt(5) 等,B 是 10^1000 范围内的一个非常大的数.
您可以使用 decimal 模块:
>>> from decimal import Decimal
>>> from math import floor, sqrt
>>>
>>> d1 = Decimal(sqrt(2))
>>> d2 = Decimal(10**1000)
>>>
>>> result = d1 * d2
>>> floor(result)
您还可以使用 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。)所以你的程序不适用于浮点数。
考虑使用 decimal
模块。例如:
import decimal
import math
a = decimal.Decimal("10") ** 10000
b = decimal.Decimal("0.123")
math.floor(a*b)