The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Компания Apple объявила о скором переводе языка Swift в разр..."
Отправлено Crazy Alex, 09-Июн-15 15:13 
Ок, объясняю для клоунов.

В зависимости от алгоритмики деление на нуль и рпочие переполнения могут быть проблемой логики или исходных данных. В первом случае в код пихаются assert, enforce и подобные конструкции, которые прерывают выполнение некорректной программы. Во втором случае, в зависимости от вероятности возникновения ошибки, можно проверять явно или положиться на исключения - код получается менее загромождён проверками. Ко float всё это, кстати, слабо относится - там вы получите inf, что абсоютно разумно и специфицировано стандартом.

Дальше. Да, в ваших примерах будет переполнение. Именно поэтому более современные языки имеют разнообразные средства для борьбы с этим - от BIGINT до специализированных цисловых классов. Чего вы привязались к Си, который очень беден во многих областях, когда мы говорим о Swift, скорее сравнимом с Go, Rust, C++ или D - я понятия не имею.

И, кстати, в C integer Overflow и division by zero абсолютно консистентны - и то и другое - undefined behavior. В плане реализации креш в подобных ситуациях куда лучше, чем продолжение работы с бессмысленными данными.

Разумеется, было бы лучше, если бы любыу переполнения отлавливались. Но на практике сложение/вычитание (и в меньшей мере умножение) быстры и часто используются, и проверка для каждого из них сильно влияла бы на быстродействие. Поэтому для желающих в том же GCC/Clang есть соответствующие intrinsics - и всё. Плюс на уровне ассемблера сложение/вычитание с переполнением - вполне осмысленные операции, на которых реализуется тот же BIGINT. Деление же используется редко, довольно дорого и вызывает легко отлавливаемое аппаратное прерывание.

Но никто и никогда не выставлял результат операции с переполнением в нуль по причине полной бессмылсенности.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру