2014-02-09 2 views
3

Вчера я заметил нечто странное. Я писал код, который должен был составлять графики в сложных квадрантах. Во всяком случае, я набрал int i = 1/0;, и он не компилировался. Когда я изменил код на double i = 1.0/0.0;, код был скомпилирован. Когда я запускал код, он выдавал ошибку/на 0. Я ожидал этого ... Но почему он компилируется отлично при использовании парных, а не целых чисел? Я использую Blue J IDEJava «Ошибки» с математикой - int vs Double

+1

Они оба компилировать хорошо для меня, и ИНТ версия выдает ошибку, которая, как ожидается, поведение, насколько я знаю. Вы уверены, что вы не перепутали их в своей голове? – Vitruvius

+0

Я думаю, что гораздо лучшее объяснение можно найти здесь: http://stackoverflow.com/questions/2381544/why-doesnt-java-throw-an-exception-when-dividing-by-0-0 –

+0

Также третий вопрос: http://stackoverflow.com/questions/21380499/is-this-declaration-possible/21380590 – Radiodef

ответ

4

Разделение значения int на ноль приведет к ArithmeticException, поэтому выражение 1/0 является незаконным.

В результате деления значения double на ноль бесконечность или NaN*, так что выражение 1.0/0.0 является законным.


*) См комментарий t_over для специфики:

+1

Просто добавьте .. Деление отрицательного числа на 0.0 равно отрицательной бесконечности, а деление нуля на ноль приводит к Double.NaN –

+0

спасибо @t_over я ценю дополнительное разъяснение :) – ChriskOlson

Смежные вопросы