gpt4 book ai didi

python - python 中的负零

转载 作者:太空宇宙 更新时间:2023-11-03 21:06:31 25 4
gpt4 key购买 nike

我在 python 的输出中遇到了负零;它的创建示例如下:

k = 0.0
print(-k)

输出将为-0.0

但是,当我将 -k 与 0.0 进行比较时,结果为 True。 0.0-0.0 之间有什么区别吗(我不关心它们可能有不同的内部表示;我只关心它们在程序中的行为。)我应该注意哪些隐藏的陷阱?

最佳答案

查看−0 (number) in Wikipedia

基本上,IEEE 确实定义了负零。

根据这个定义,对于所有目的:

-0.0 == +0.0 == 0

我同意aaronasterling-0.0+0.0是不同的对象。使它们相等(相等运算符)可确保代码中不会引入细微的错误。
想想a * b == c * d

>>> a = 3.4
>>> b =4.4
>>> c = -0.0
>>> d = +0.0
>>> a*c
-0.0
>>> b*d
0.0
>>> a*c == b*d
True
>>>
<小时/>

[编辑:基于评论的更多信息]

当我说出于所有实际目的时,我相当仓促地选择了这个词。我的意思是标准平等比较。

正如引用文献所述,IEEE 标准定义了比较,以便 +0 = -0 ,而不是 -0 < +0 。尽管始终可以忽略零符号,但 IEEE 标准并没有这样做。当乘法或除法涉及带符号的零时,通常的符号规则适用于计算答案的符号。

类似 divmod 的操作和atan2表现出这种行为。事实上,atan2 complies与底层“C”库一样符合 IEEE 定义。

>>> divmod(-0.0,100)
(-0.0, 0.0)
>>> divmod(+0.0,100)
(0.0, 0.0)

>>> math.atan2(0.0, 0.0) == math.atan2(-0.0, 0.0)
True
>>> math.atan2(0.0, -0.0) == math.atan2(-0.0, -0.0)
False

一种方法是通过文档查明该实现是否符合 IEEE 行为。从讨论中还可以看出,平台也存在微妙的差异。

然而,这方面(IEEE 定义合规性)并没有在任何地方得到尊重。参见PEP 754的拒绝由于不感兴趣!我不确定这是不是后来才发现的。

另请参阅What Every Computer Scientist Should Know About Floating-Point Arithmetic .

关于python - python 中的负零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55360206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com