首页 > 解决方案 > python适合大整数和浮点计算吗?

问题描述

我正在尝试使用素数。我试过这个:

p = 2**82_589_933 -1
p = p/7

并得到这个错误:

OverflowError: integer division result too large for a float

也试过这个:

A = 1.306377883863080690468614492602605712916784585156713644368053759966434053766826598821501403701197395707296960938103086882238861447816353486887133922146194353457871100331881405093575355831932648017213832361522359062218601610856679057215197976095161992952797079925631721527841237130765849112456317518426331056521535131866841550790793723859233522084218420405320517689026025793443008695290636205698968726212274997876664385157661914387728449820775905648255609150041237885247936260880466881540643744253401310736114409413765036437930126767211713103026522838661546668804874760951441079075406984172603473107746

print(A)

但它打印:1.3063778838630806

有没有办法使用高精度浮点数?

标签: pythonpython-3.xfloating-point

解决方案


是的,使用十进制数,而不是浮点数:

十进制模块提供对快速正确舍入的十进制浮点运算的支持。它提供了优于浮点数据类型的几个优点:

十进制“基于一个以人为本设计的浮点模型,并且必然有一个最重要的指导原则——计算机必须提供一种与人们在学校学习的算术相同的算术。” – 十进制算术规范的摘录。

十进制数可以精确表示。相反,像 1.1 和 2.2 这样的数字在二进制浮点中没有精确的表示。最终用户通常不会期望 1.1 + 2.2 像二进制浮点那样显示为 3.3000000000000003。(...) 与基于硬件的二进制浮点不同,十进制模块具有用户可更改的精度(默认为 28 位),它可以根据给定问题的需要设置:

>>> from decimal import *
>>> getcontext().prec = 6
>>> Decimal(1) / Decimal(7)
Decimal('0.142857')
>>> getcontext().prec = 28
>>> Decimal(1) / Decimal(7)
Decimal('0.1428571428571428571428571429')

推荐阅读