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

2024-05-23 20:45:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

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

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

谢谢


Tags: 数据语言计算机文章二进制数字科学差异
3条回答

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

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

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

现在,在“模型链”中:

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

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

python中的decimal类可以帮助您处理这个问题

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

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

将此应用于您的示例:

小数点后14位 0.100000000000000005551115123126变成0.100000000000000,这根本不会引入任何错误

相关问题 更多 >