Вопрос: Защитите от missbehaviour, вызванного двумя комплиментами


Я прочитал следующий вопрос: Значение i для (i == -i && i! = 0) для возврата true в Java  и был слегка ослеплен.

Один читает о потеря космических аппаратов  из-за использования неправильной системы единиц, поэтому увидеть поведение, упомянутое в вопросе, и awnser довольно неожиданно для меня.

Как защитить от ошибок / непредвиденного поведения, вызванных этим, без штрафа за выполнение? (Мне трудно думать о смысле кода с помощью = сравнение, хотя я считаю это довольно простым для abs возвращая отрицательное значение для отказа). Есть ли исключения? Linters, которые предупреждают об этом?


Неожиданное поведение:

Джава abs() возвращает минимальное отрицательное число, если вход является минимальным отрицательным числом. -x = x имеет решение, отличное от 0, минимальное отрицательное число в двойном дополнении.


4


источник


Ответы:


Наилучшая практика заключается в том, чтобы

  1. Используйте разумные типы в вашей системе. Имейте в виду, что машина int не является математическим целым числом. Если вашей программе может потребоваться использовать номера из диапазона машинного int, вы должны использовать большую целочисленную библиотеку, а не машинные ints.

  2. Защищайте программу. Если операция может привести к тому, что значение выходит за пределы диапазона, то вы должны явно проверить это после выполнения операции (или, что еще лучше, проверить до  операция, чтобы увидеть, приведут ли аргументы к ошибке).

Конечно, если вы делаете 2., вам все равно нужно решить, что делать, если возникает ошибка, которой вы не пользуетесь 1. Однако использование больших целых чисел приведет к снижению производительности на большинстве языков. Независимо от того, будет ли это время исполнения больше или меньше штрафа от выполнения проверок безопасности, вероятно, будет зависеть от языка программирования и особенностей вашей программы.

В конце концов, задача программиста должна отвечать за код, который они пишут. Язык может предоставить вам только такую ​​помощь.


3



Защитите от missbehaviour, вызванного двумя комплиментами | Programmerz.ru