加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python中的浮点概念

发布时间:2020-12-20 13:03:41 所属栏目:Python 来源:网络整理
导读:为什么-22/10在 python中返回-3.任何关于此的指示对我都有帮助. 解决方法 PEP 238,“改变分部运算符”,我认为这些问题很好地解释了.简而言之:当Python被设计时,它采用整数之间的“截断”含义,因为大多数其他编程语言自1957年第一个FORTRAN编译器启动以来就
为什么-22/10在 python中返回-3.任何关于此的指示对我都有帮助.

解决方法

PEP 238,“改变分部运算符”,我认为这些问题很好地解释了.简而言之:当Python被设计时,它采用整数之间的“截断”含义,因为大多数其他编程语言自1957年第一个FORTRAN编译器启动以来就做过(全大写语言名称和所有;-). (一种广泛使用的语言没有采用这种意义,使用/生成浮点结果和div用于截断,是Pascal).

在2001年,决定这个选择不是最优的(引用PEP,“这使表达式期望浮点数或复杂结果容易出现错误,当整数不被预期但可能作为输入”),并转而使用新的运算符/ /通过截断请求除法,并更改/的含义以产生浮点结果(“true division”).

您可以通过放置语句来显式请求此行为

from __future__ import division

在模块的开头(命令行开关-Q到python解释器也可以控制除法的行为).对于x的所有值,缺少这样的“从未来导入”(以及命令行切换使用),Python 2.x,总是使用“经典划分”(即/在整数之间截断).

但是,Python 3总是使用“真正的除法”(/ ints之间产生一个浮点数).

请注意一个奇怪的推论(在Python 3中)……:

>>> from fractions import Fraction
>>> Fraction(1/2)
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/fractions.py",line 100,in __new__
    raise TypeError("argument should be a string "
TypeError: argument should be a string or a Rational instance

因为/产生一个浮点数,它不能作为Fraction的参数(否则精度可能会无声地丢失).您必须使用字符串,或将分子和分母作为单独的参数传递:

>>> Fraction(1,2)
Fraction(1,2)
>>> Fraction('1/2')
Fraction(1,2)

gmpy使用一种不同的,更宽容的方法来构建mpqs,相当于Python 3 Fractions ……:

>>> import gmpy
>>> gmpy.mpq(1/2)
mpq(1,2)

具体来说(参见第3168行和the source中的第3168行),gmpy使用Stern-Brocot tree将浮点参数的“最佳实际近似”作为理性(当然,这可以掩盖精度损失).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读