![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| _Y_ |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
1) Операция
отдает -1486618624 Т.е. переполнение просто закидывается в целочисленную переменную не озабочиваясь тем, что результат бессмысленен. То же и с long только числа больше. 2) Операция
отдает Infinity несмотря на то, что делитель целочисленный и никаких проблем с округлением или машинной ошибкой не подразумевается. 3) Думаю таких примеров еще можно накопать. Почему они возникают - понятно. Вопрос: Можно ли как-то заставить не считать ерунду, а выкидывать исключение? Естественно, проверки "в ручную" со множеством операторов if как-то не интересуют. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Нет. Такова спецификация JVM, она так и должна себя вести. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| nornad |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Малость не понял - а какой результат по-твоему должен был быть? Из курса школы ещё помню - на ноль делить нельзя. Точнее, как я недавно объяснял, можно, но машина не имеет возможности корректно представить результат (бесконечность, конечно, можно представить некоей специальной константой, но это не лучший выход; если тема интересна - могу развить). Поэтому обычно производится выброс исключения. Кстати, то, что делитель целочисленный - не имеет значения. Один из операндов вещественный - результат тоже вещественный. При делении целого на 0 - исключение, а для вещественных чисел задумана константа "бесконечность". Потому и исключений здесь не требуется - операция с точки зрения джавы абсолютно законна.
Если только сделать свои классы для чисел и реализовать все операции методами, где будут производиться необходимые проверки. Ну или везде в коде навтыкать вызов методов, проверяющих "законность" операции с твоей точки зрения. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
||||
|
|||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
То что поведение законно и почему оно возникает вопросом и не являлось. Но все равно спасибо.
Знал, что Java не создавалась для решения рассчетных задач, но не до такой же степени! Думал - может есть обходной путь без нанизывания всяких тормозных проверок. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |