核心Java上除以0.0

我在java中听到了一个转折点.如果有人知道你被要求分享的正当理由.
问题是:

double result1 = 1.0/0.0;
sop(result1); // output Infinity
double result2 = 0.0/0.0;
sop(result2); // output NaN

浮点变量也是如此.但对于int类型,它引发了ArithmeticException.为什么?

注意:我使用的是jdk 1.7

解决方法:

您不能使用int表示无穷大或NAN.

JLS

The result of a floating-point division is determined by the rules of
IEEE 754 arithmetic:

Division of a nonzero finite value by a zero results in a signed
infinity. The sign is determined by the rule stated above.

检查IEEE explanation

Why doesn’t division by zero (or overflow, or underflow) stop the
program or trigger an error? Why does a standard on numbers include
“not-a-number” (NaN)?
The 754 model encourages robust programs. It is
intended not only for numerical analysts but also for spreadsheet
users, database systems, or even coffee pots. The propagation rules
for NaNs and infinities allow inconsequential exceptions to vanish.
Similarly, gradual underflow maintains error properties over a
precision’s range.

When exceptional situations need attention, they can be examined
immediately via traps or at a convenient time via status flags. Traps
can be used to stop a program, but unrecoverable situations are
extremely rare. Simply stopping a program is not an option for
embedded systems or network agents. More often, traps log diagnostic
information or substitute valid results.

Flags offer both predictable control flow and speed. Their use
requires the programmer be aware of exceptional conditions, but flag
stickiness allows programmers to delay handling exceptional conditions
until necessary.

上一篇:在WWDC 2014上,没提到的iOS 8 八大新特性


下一篇:c#-有关基于ServiceStack的服务中的类型命名的问题