python - 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
有没有办法使用高精度浮点数?
解决方案
是的,使用十进制数,而不是浮点数:
十进制模块提供对快速正确舍入的十进制浮点运算的支持。它提供了优于浮点数据类型的几个优点:
十进制“基于一个以人为本设计的浮点模型,并且必然有一个最重要的指导原则——计算机必须提供一种与人们在学校学习的算术相同的算术。” – 十进制算术规范的摘录。
十进制数可以精确表示。相反,像 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')
推荐阅读
- encryption-symmetric - 加密0和1的向量
- python - Python API 上传文件发布
- django - 权限被拒绝:在 Windows 中安装 django 时
- java - Openjdk openJ9 vs 使用ZKOSS的热点反射区别
- flutter - 使用静态方法而不是使用 json_serializable 的工厂
- express - Apollo Server 作为 Nuxt 服务器中间件
- scikit-learn - 是否可以在 Scikit-learn 中使用自定义的决策树分类器?
- c# - 使用 ComboBox 中的 SelectedItem 值填充其他文本框
- .htaccess - 访问在 Google Cloud 上运行的网站时,是否可以要求登录?
- sharepoint-2016 - 如何在 Sharepoint 2016 中格式化列表列标题