Python中的浮点概念
为什么-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将浮点参数的“最佳实际近似”作为理性(当然,这可以掩盖精度损失). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |