Re[6]: А идет ли развитие в области альтернатив исключениям?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 26.03.16 05:37
Оценка:
Здравствуйте, __kot2, Вы писали:

__>Здравствуйте, _hum_, Вы писали:

__>>не мусор, а NaN значение в математике же тоже так сделали — положили a/0 равным oo (бесконечности), что упростило написание кучи математических текстов (вместо того, чтобы каждый раз в тексте оговаривать "кроме нуля").
__>я мехмат закончил, это вы можете бабушке у подьезда заяснить, что a/0 равно бесконечности. в реальности конечно же ничего подобного в математике нет

Считайте это лёгким личным наездом, но именно тот факт, что это был мехмат, а не примат, кибернетика или что-то подобное, меня как раз и вводит в "смутные сомнения" о том, что Вы понимаете, что происходит и что должно быть.
Потому что обычно только после курса моделирования студент начинает понимать, что математика только тогда имеет смысл, когда моделирование сделано правильно.
Что натуральные числа это хорошо ровно настолько, насколько мы можем, например, считать все яблоки по 1 штуке, игнорируя, насколько одно больше, слаще или червивее другого (и даже оценить, какие погрешности получаются при таком игнорировании).
Почему старая шутка "стоящие часы полезнее, потому что хотя бы дважды в сутки показывают точное время" хороша только как средство для объяснения, что такое ложный парадокс, и должна стоять рядом с апориями Зенона.
И тэ дэ и тэ пэ.
Да, я тут однозначно на стороне прикладной математики. Можете кинуть цифровым камнем.

В этом смысле решение, чему равно 1/0 — вообще не существует, ∞ без знака, +∞ или ещё чему-то — просто выбор контекста для работы, и контекст, где это противоположное нулю значение на числовой окружности, не менее важен, чем тот, где значения не существует. Он просто другой.

__>>если петя забудет, то в случае с NaN — получит работающую программу, выдающую результатом NaN, что лучше, чем падение, поскольку программа может попутно еще делать какие-то важные действия, никак не связанные с последствиями исключительной ситуации (например, отображение времени на экране монитора никак не связано с управлением искусственной вентиляцией легких больного, и "валить систему" только потому, что при расчете времени произошло деление на нуль — кощунство )

__>а зач6м Петя свалил в один процесс отображение времени на экране и вентиляцию легких? он у нас дурачок-с?

Это, вообще-то, одна и та же установка, и часто один и тот же процессор. Который может, например, уметь плавучку по стандарту, но не иметь защиты памяти и режима супервизора. А что вы предлагаете? Вызывать аппаратный ресет по переполнению?
Почитайте IEEE754, его умные люди делали и они не зря ввели маски исключений и битовые поля сработавших замаскированных ошибок, средства управления ими (чтение, сброс)...

__>вы наверное намекаете, что в "новых современных" языках программирования, типа жабоскрипта есть Nan? да есть, но такие языки часто спроектированы школьником-дурачком Петей для себя, чтобы ему было удобнее, а совсем не для того, чтобы работать быстро и надежно.


"Новые языки" тут ни при чём. Возведение 1e200 в double в квадрат выдаст +Inf даже в Фортране, если платформа по IEEE754 и режим округления не трогали. Странности реализации JS с этим никак не связаны, там много другого хитрого.
Я всё тоскую, что не сохранил скриншот, где номер банковской карточки выводился в виде 5.3762e+16 — удобный аргумент в некоторых спорах но опять же это number vs. string, а не float vs. integer.

__> удобно иметь Nan? удобно. но это в ущерб стиабильности работы. где нас это устраивает? в гуе, например, более-менее.


Повторяю: это обеспечить тривиально, если вызвать, в терминах языка Си, feenableexcept(FE_OVERFLOW|FE_DIVBYZERO). Сделайте — и первое же переполнение вызовет исключение (будет это SIGFPE, как по умолчанию в Unix, переведётся в SEH или как-то ещё передастся — это уже за пределами стандартов, но как-то будет). Для других языков не знаю, но в C#, наверно, checked покрывает эту тему.

__> хотя я бы предпочел все-таки в каком-то медицинском или финансовом гуе, чтобы инфа все-таки были или 100% корректной или никакой, а не "корректной, но не всегда"


Оно так и будет. Просто где-то будет исключение сразу, а где-то надо самому проверить, что NaN не возник в данных и/или не перепутан с реальным значением, и проверки сделаны правильно (например, с плавучкой нельзя автоматически считать, что если a>b, то b<a, потому что есть четвёртый случай — несравнимость).
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.