今天早上我碰到了一些东西,这让我觉得...
如果您使用Python存储变量,并且假设大多数语言为x = 0.1,然后将该值显示为小数点后30位,您将得到:'0.100000000000000005551115123126'
我在网上阅读了一篇文章,解释说该数字以二进制形式存储在计算机上,并且差异是由于基数转换引起的。
我的问题是物理学家和纳米科学家在进行计算时如何解决这个问题?
我一直认为,如果我使用科学符号将数据输入到计算器中,将会为我提供可靠的准确结果,但是现在我想知道是否确实如此?
必须有一个简单的解决方案吗?
谢谢。
答案 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)
与往常一样,它取决于上下文(对下面所有“正常”和“通常”的词表示抱歉)。还取决于“科学”的定义。以下是“物理”建模而非“纯粹数学”建模的示例。
通常,使用计算机进行科学/工程计算:
现在,在“模型链”中:
您在“模型链”中需要进行很多权衡(在准确性,计算成本,输入数据的数量和质量之间,...)。 从“实用”的角度来看,浮点算法不是完全可以忽略的,但通常是“模型链”中最少的问题之一。