【问题标题】:Very big number with floating point in PythonPython中带有浮点的非常大的数字
【发布时间】:2022-09-23 21:51:26
【问题描述】:

我在整个 SO 中做了一些研究,我相信这不是 How to get largest possible precision? (Python - Decimal)Arithmetic precision problems with large numbersHow to store a big floating point number in python variable? 的重复

假设我有这个号码:11400361308443875328.123123123123

我可以使用什么数据类型将其存储在 Python 中?我试过floatdecimal,它给我的结果是:

x = Decimal(\'11400361308443875328.123123123123123\') + Decimal(\'11400361308443875328.123123123123123\')
print(\"{:12f}\".format(x))
# 22800722616887750656.24624625

y = float(11400361308443875328.123123123123) + float(11400361308443875328.123123123123)
print(\"{:12f}\".format(y))
# 22800722616887750656.000000

z = Decimal(\'0.123123123123123\') + Decimal(\'0.123123123123123\')
print(\"{:12f}\".format(z))
# 0.246246246246246

我需要 z 的精确度。我应该如何以浮点精度存储这个大数字,以便我可以对其进行一些数学运算?我可以如何做到这一点有一些技巧吗?

关于为什么我需要这种高精度的问题:这是一个来自编码挑战的问题(不是实际问题),提交的评分有 +- 10^-6 精度的余地

  • x = Decimal(\'11400361308443875328.123123123123\')。如果不将其设为字符串,则 Decimal 没有机会保存精度,因为它获得的数字已经失去了所需的精度。
  • 抱歉,这是我的错误,让我解决这个问题。但是您在@matszwecja那里提出了一个很好的观点
  • 如果两个数字中的浮点位数相同,则可以通过字符串操作删除小数点分隔符并添加结果整数(整数在 python 中是任意大小)。然后,您可以再次使用字符串操作简单地添加小数点分隔符。

标签: python python-3.x


【解决方案1】:

如果decimal的默认精度不够,可以通过修改getcontext().prec的值来改变

from decimal import Decimal, getcontext

getcontext().prec = 50

x = Decimal('11400361308443875328.123123123123123') + Decimal('11400361308443875328.123123123123123123')
print(x) # 22800722616887750656.246246246246246123

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多