Why do floating-point numbers have signed zeros?(为什么浮点数有符号零?)
问题描述
为什么双打有 -0
和 +0
?有什么背景和意义?
-0
(通常)被视为 0
*******.当 negative 浮点数非常接近于零以至于它可以被认为是 0
时,它可能会导致(要清楚,我指的是 )
用数学术语:
这说明了 0
和 -0
在计算意义上的一个显着区别.
这里有一些相关资源,其中一些已经提出.为了完整起见,我将它们包括在内:
- 关于签名零的维基百科文章
- "每个计算机科学家都应该知道的浮点运算知识"(参见有符号零部分)
- (PDF) "Much Ado About Nothing's Sign Bit" - 一篇有趣的论文由 W. Kahan 撰写.
Why do doubles have -0
as well as +0
? What is the background and significance?
-0
is (generally) treated as 0
*******. It can result when a negative floating-point number is so close to zero that it can be considered 0
(to be clear, I'm referring to arithmetic underflow, and the results of the following computations are interpreted as being exactly ±0
, not just really small numbers). e.g.
System.out.println(-1 / Float.POSITIVE_INFINITY);
-0.0
If we consider the same case with a positive number, we will receive our good old 0
:
System.out.println(1 / Float.POSITIVE_INFINITY);
0.0
******* Here's a case where using -0.0
results in something different than when using 0.0
:
System.out.println(1 / 0.0);
System.out.println(1 / -0.0);
Infinity -Infinity
This makes sense if we consider the function 1 / x
. As x
approaches 0
from the +
-side, we should get positive infinity, but as it approaches from the -
-side, we should get negative infinity. The graph of the function should make this clear:
(source)
In math-terms:
This illustrates one significant difference between 0
and -0
in the computational sense.
Here are some relevant resources, some of which have been brought up already. I've included them for the sake of completeness:
- Wikipedia article on signed zero
- "What Every Computer Scientist Should Know About Floating-Point Arithmetic" (See Signed Zero section)
- (PDF) "Much Ado About Nothing's Sign Bit" - an interesting paper by W. Kahan.
这篇关于为什么浮点数有符号零?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:为什么浮点数有符号零?
基础教程推荐
- 降序排序:Java Map 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01