【发布时间】:2022-09-23 21:51:26
【问题描述】:
我在整个 SO 中做了一些研究,我相信这不是 How to get largest possible precision? (Python - Decimal) 或 Arithmetic precision problems with large numbers 或 How to store a big floating point number in python variable? 的重复
假设我有这个号码:11400361308443875328.123123123123
我可以使用什么数据类型将其存储在 Python 中?我试过float、decimal,它给我的结果是:
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