如何在计算机上使用十进制数字进行计算?

时间:2020-09-06 12:58:37

标签: python

今天早上我碰到了一些东西,这让我觉得...

如果您使用Python存储变量,并且假设大多数语言为x = 0.1,然后将该值显示为小数点后30位,您将得到:'0.100000000000000005551115123126'

我在网上阅读了一篇文章,解释说该数字以二进制形式存储在计算机上,并且差异是由于基数转换引起的。

我的问题是物理学家和纳米科学家在进行计算时如何解决这个问题?

我一直认为,如果我使用科学符号将数据输入到计算器中,将会为我提供可靠的准确结果,但是现在我想知道是否确实如此?

必须有一个简单的解决方案吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

好吧,作为物理学家,我说这些小数在大多数情况下都是多余的。在小数点后16位实际上并不重要。测量的精度没有达到该水平(甚至在QED中也是如此)。 Take a look at here,最高精度的测量值约为10^13 - 10^14

将此应用于您的示例:

有14个小数位 0.100000000000000005551115123126变成0.100000000000000,根本不会引起任何错误。

答案 1 :(得分:1)

python中有一个decimal类可以帮助您解决此问题。

但是,就我个人而言,当我进行货币交易时,我不想拥有像1€99000012这样的额外收益。我将金额转换为美分。所以我只需要操作和存储整数。

答案 2 :(得分:1)

与往常一样,它取决于上下文(对下面所有“正常”和“通常”的词表示抱歉)。还取决于“科学”的定义。以下是“物理”建模而非“纯粹数学”建模的示例。

通常,使用计算机进行科学/工程计算:

  1. 你有现实
  2. 您有一个关于现实的解析数学模型
  3. 要求解分析模型,通常必须使用一些数值逼近法(例如,有限元法,一些用于时间积分的数值方案,...)
  4. 您使用浮点算术求解3。

现在,在“模型链”中:

  • 您从1)现实到2)分析数学模型失去了准确性
    • 大多数理论都做了一些假设(忽略相对论和使用经典的牛顿力学,忽略重力效应,忽略...)
    • 您不完全了解所有边界条件和初始条件
    • 您不完全了解所有材料特性
    • 您不知道...,必须做一些假设
  • 您将精度从2)分析提高到3)数值模型
    • 来自定义。分析解决方案是准确的,但通常实际上是无法实现的。
    • 在无限计算资源的极限情况下,数值方法通常会收敛到解析解,该解析解在某种程度上受到有限的浮点精度的限制,但通常资源是有限的。
  • 您使用浮点算法失去了一些准确性
    • 在某些情况下会影响数值解
    • 存在使用精确数字的方法,但是它们(通常要多得多)在计算上更昂贵

您在“模型链”中需要进行很多权衡(在准确性,计算成本,输入数据的数量和质量之间,...)。 从“实用”的角度来看,浮点算法不是完全可以忽略的,但通常是“模型链”中最少的问题之一。

相关问题