Python 在计算机上如何计算十进制数?

Python 在计算机上如何计算十进制数?,python,Python,今天早上我遇到了一件事让我想 如果在Python中存储一个变量,我假设大多数语言都是x=0.1,然后将该值显示为30位小数,结果是:“0.10000000000000055115123126” 我在网上读到一篇文章,解释说数字是以二进制形式存储在计算机上的,这种差异是由于基数转换造成的 我的问题是物理学家和纳米科学家在进行计算时是如何绕过这个问题的 我一直认为,如果我用科学记数法把数据输入计算器,它会给我一个可靠准确的结果,但现在我想知道是否真的是这样 必须有一个简单的解决方案吗 谢谢。pyth

今天早上我遇到了一件事让我想

如果在Python中存储一个变量,我假设大多数语言都是x=0.1,然后将该值显示为30位小数,结果是:“0.10000000000000055115123126”

我在网上读到一篇文章,解释说数字是以二进制形式存储在计算机上的,这种差异是由于基数转换造成的


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

我一直认为,如果我用科学记数法把数据输入计算器,它会给我一个可靠准确的结果,但现在我想知道是否真的是这样

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

谢谢。

python中有一个类可以帮助您处理这个问题


但就个人而言,当我处理货币交易时,我不想有额外的钱,比如9900012欧元。我把金额换算成美分。所以我只需要处理和存储整数。

作为物理学家,我说这些小数在大多数情况下是多余的。。小数点后第16位是什么并不重要。测量精度没有达到这个水平(即使在QED中也没有),最高精度的测量值约为
10^13-10^14

将此应用于您的示例:

小数点后14位
0.10000000000000055115123126
变为
0.10000000000000
,这根本不会引入任何错误。

一如既往,这取决于上下文(很抱歉下面有“正常”和“通常”两个词)。也取决于“科学”的定义。下面是“物理”建模的例子,而不是“纯粹的数学”建模

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

  • 你有现实
  • 你有一个现实的分析数学模型
  • 要求解分析模型,通常必须使用一些数值近似(例如,有限元法、时间积分的一些数值格式等)
  • 你解3。使用浮点算法
  • 现在,在“模型链”中:

    • 你失去了从现实到分析数学模型的准确性
      • 大多数理论都有一些假设(忽略相对论和经典牛顿力学,忽略重力效应,忽略…)
      • 你不知道所有的边界和初始条件
      • 您并不完全了解所有的材质属性
      • 你不知道。。。并且必须做一些假设
    • 你把精度从分析模型降低到了数值模型
      • 根据定义。解析解是精确的,但通常无法实现
      • 在计算资源有限的情况下,数值方法通常收敛到解析解,解析解在某种程度上受到有限浮点精度的限制,但通常资源是有限的
    • 使用浮点运算会降低一些精度
      • 在某些情况下,它会影响数值解
      • 有一些方法使用精确的数字,但它们(通常)计算成本更高
    您在“模型链”中有很多权衡(在准确性、计算成本、输入数据的数量和质量之间,…)。
    从“实用”的角度来看,浮点运算不是完全可以忽略的,但通常是“模型链”中最小的问题之一。

    “我的问题是物理学家和纳米科学家在进行计算时如何绕过这个问题?”-这对于那些领域来说根本不是问题。十进制并不特别。物理学不需要十进制。我知道它不需要十进制,但我认为计算机需要,因此涉及这些数字的计算会引入一定程度的误差?那是我的想法。从阅读回复来看,似乎存在误差水平,但考虑到测量中存在误差条,误差水平并不显著。这就是我从阅读稿件中得到的。谢谢你,简。我没有实际问题要解决。当我读到Python中的浮点数时,我偶然发现了这个问题,这让我想到了计算的后果。我来看看“浮点算术”。所谓浮点算术,我指的是像
    0.1+0.2这样的工件=0.3
    (0.1+0.2)+0.3=0.1+(0.2+0.3)
    (在并行计算中很重要,在并行计算中,数字以随机顺序求和),打印
    0.1的实际存储值,等等。当然知道这个很好(尽管不是每个人都需要)