Python数值计算问题

2024-04-16 06:57:20 发布

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

我用python计算了以下两个值,得到了不同的结果!如果有人能解释为什么会这样,那就太好了。你知道吗

(111 - (111 + 2*17)*3375)/(-14)给出34947作为输出。你知道吗

(111 - (111 + 2*17)*3375)/(14)*-1给出34948作为输出。你知道吗

这两项在数学上是等价的。你知道吗


Tags: 数学等价
3条回答

这与舍入规则有关。举个简单的例子:

>>> -3/(-2)
1

>>> -3/2*-1
2

1.5向下四舍五入到1-1.5向下四舍五入到-2。在某种程度上是一致的。你知道吗

Doc reference:

Plain or long integer division yields an integer of the same type; the result is that of mathematical division with the ‘floor’ function applied to the result.

如果希望在Python2.x中得到浮点结果,则需要显式转换(或仅使用浮点文本),或者执行from __future__ import division。在python3.x中,除法总是产生一个浮点(ref)。你知道吗

你在做整数运算,它会根据分数结果是负数还是正数,以不同的方式取整分数结果。使用浮点除法:

>>> (111 - (111 + 2*17)*3375)/(14.)*(-1)
34947.42857142857
>>> (111 - (111 + 2*17)*3375)/(-14.)
34947.42857142857

它归结为python处理整数除法的方式。你知道吗

如果除法的分子(上)或除数(下)是负数,那么python将从零取整。让自己相信这一点的一个简单方法是比较两个更简单的分数:25/625/(-6)。这些将分别产生4和-5。你知道吗

为了得到相同的结果,您可以使用浮点IE14.0来转换为浮点算术。你知道吗

如果你对更多的数学感兴趣,这似乎是一篇相当不错的文章: http://python-history.blogspot.co.nz/2010/08/why-pythons-integer-division-floors.html

相关问题 更多 >