我创建了一个具有极高浮点精度的阈值。我需要一个值,大约是0,999999999…有200个9。这在python中可能吗?
我想到的一个解决方案是使用1.-1e-200创建它,但这只给了我值1。
正常变量是不可能的。Python使用处理器的双精度浮点数字,该数字包含大约17位小数。
有一些像bigfloat
这样的附加包可以进行任意浮点运算,但您需要一个很好的理由来使用它们。大多数人高估了浮点数学对精度的需求。
标准fractions.Fraction
类提供了无限制精度的精确有理算术。
>>> 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)