2015-12-04 62 views
1

我正在使用斯威夫特计算器,但我遇到了一个小问题:当两个数相乘时,我的结果与普通计算器的结果不一样。如何在Swift中乘以数字?

例如:

在斯威夫特:

0.333328247070312 * 16 = 5.33325195312499 

在常规的计算器:

0.333328247070312 * 16 = 5.333251953 

我应该怎么做才能得到相同的结果,如雨燕常规计算器?

+2

浮点算法不精确。 [每个计算机程序员应该知道的浮点数](http://blog.reverberate.org/2014/09/what-every-computer-programmer-should.html)。 –

+0

感谢每一个发现我使用Double类型的解决方案,而不是浮动 – abedAssa

回答

1

您的“常规计算器”在结果打印中看起来不对或很奇怪,所以,您不应该依赖它。我重新检查你在Python3计算这是众所周知的计算都在binary64双和打印最精确的十进制形式:比雨燕输出

>>> 0.333328247070312 * 16 
5.333251953124992 

它更详细的(一个数字)。你的输出也不能被验证为binary32计算,因为后者有7个正确的十进制数字,并且通常不会打印更多的数字。这个计算器是什么?由于其自定义的6字节浮点数,我假设一些基于Pascal的工具。

试着让计算器打印最详细的表格。如果失败,请将其丢弃并使用最精确的工具进行验证,或者如果您的任务确实得到相同的结果,请详细了解其处理过程。