如何在Python中提高数百位小数的精度
我需要计算在非常低的温度下的本征载流子浓度,这需要非常小的值(低至10-678),通过Python四舍五入到0。您建议我如何提高精度?两个选项:如何在Python中提高数百位小数的精度,python,python-3.x,precision,Python,Python 3.x,Precision,我需要计算在非常低的温度下的本征载流子浓度,这需要非常小的值(低至10-678),通过Python四舍五入到0。您建议我如何提高精度?两个选项: 用对数表示法工作。因此,您不是直接存储x,而是存储log10(x)。因此,在本例中,您将存储-678。这使乘法成为一种选择,但加法变得不可能 使用,并将精度设置为所需级别 >>从十进制导入十进制,getcontext >>>getcontext().prec=10000 >>>十进制(10)**-678 十进制('1E-678') 两个选项: 用对
x
,而是存储log10(x)
。因此,在本例中,您将存储-678
。这使乘法成为一种选择,但加法变得不可能
>>从十进制导入十进制,getcontext
>>>getcontext().prec=10000
>>>十进制(10)**-678
十进制('1E-678')
两个选项:
x
,而是存储log10(x)
。因此,在本例中,您将存储-678
。这使乘法成为一种选择,但加法变得不可能
>>从十进制导入十进制,getcontext
>>>getcontext().prec=10000
>>>十进制(10)**-678
十进制('1E-678')
Python对您可以达到的精度有内在限制吗(可能是32位到64位版本的Python?),或者这受到操作系统的限制,或者根本没有这种限制?@BramVanroy在我的机器上decimal.MAX_PREC
是99999999999999999
,这是很多精确的数字:)谢谢你的回复!不幸的是,我已经尝试了你的建议,但我仍然在[50]中得到了0:从decimal导入decimal,从[51]:getcontext()中得到getcontext。prec=10000 In[52]:decimal(10**-678)Out[52]:decimal('0')。Sarah你可能搞砸了。确保直接将数据加载到一个Decimal
中,而不是首先将其作为float
加载@Sarah是的,你搞砸了。看看你执行的和我执行的之间的区别。在进行任何操作之前,您首先必须确保您在“十进制范围”内工作。您首先在“float land”中执行10**-678
,然后将其转换为Decimal
——但是它的负载太大,已经四舍五入了。在Python中,您可以达到的精度是否有内在的限制(可能在32位到64位版本的Python之间?),或者这是受操作系统限制的?或者可能根本没有这样的限制?@BramVanroy在我的机器上十进制。MAX_PREC
是9999999999999
,所以这是很多精度的数字:)谢谢你的回复!不幸的是,我已经尝试了你的建议,但我仍然在[50]中得到了0:从decimal导入decimal,从[51]:getcontext()中得到getcontext。prec=10000 In[52]:decimal(10**-678)Out[52]:decimal('0')。Sarah你可能搞砸了。确保直接将数据加载到一个Decimal
中,而不是首先将其作为float
加载@Sarah是的,你搞砸了。看看你执行的和我执行的之间的区别。在进行任何操作之前,您首先必须确保您在“十进制范围”内工作。您首先在“浮动区域”中执行10**-678
,然后将其转换为Decimal
——但是它太重了,已经四舍五入了。为什么不上传您编写的代码呢?如果有一个更好的问题,为什么不上传到目前为止编写的代码呢?如果有一个