python 中的极限浮点精度数 1.0-(0.1^200)
Extreme floating point precision number 1.0-(0.1^200) in python
我正在创建一个具有极高浮点精度的阈值。我需要一个类似 0.999999999... 的值,其中包含 200 个 9。在 python 中可以吗?
我想到的一个解决方案是使用 1.-1e-200 创建它,但这只给我值 1。
普通变量是不可能的。 Python 使用处理器的双精度浮点数,它包含大约 17 个十进制数字。
有像 bigfloat
这样的附加包可以进行任意浮点运算,但您需要有充分的理由才能使用它们。大多数人高估了浮点数学对精度的需求。
The standard fractions.Fraction
class 提供无限精度的精确有理算术。
>>> from fractions import Fraction
>>> x = Fraction(1) - Fraction(1, 10**200)
decimal.Decimal
如果您正在寻找高精度而不是精确算术,也可能满足您的需求,但您必须调整上下文设置以允许超过默认的 28 位有效数字。
>>> from decimal import Decimal, Context
>>> decimal.setcontext(Context(prec=1000))
>>> x = Decimal(1) - 1 / Decimal(10**200)
我正在创建一个具有极高浮点精度的阈值。我需要一个类似 0.999999999... 的值,其中包含 200 个 9。在 python 中可以吗?
我想到的一个解决方案是使用 1.-1e-200 创建它,但这只给我值 1。
普通变量是不可能的。 Python 使用处理器的双精度浮点数,它包含大约 17 个十进制数字。
有像 bigfloat
这样的附加包可以进行任意浮点运算,但您需要有充分的理由才能使用它们。大多数人高估了浮点数学对精度的需求。
The standard fractions.Fraction
class 提供无限精度的精确有理算术。
>>> from fractions import Fraction
>>> x = Fraction(1) - Fraction(1, 10**200)
decimal.Decimal
如果您正在寻找高精度而不是精确算术,也可能满足您的需求,但您必须调整上下文设置以允许超过默认的 28 位有效数字。
>>> from decimal import Decimal, Context
>>> decimal.setcontext(Context(prec=1000))
>>> x = Decimal(1) - 1 / Decimal(10**200)