vak: (Default)
[personal profile] vak
Как сложить/вычесть/умножить два числа на Си и отловить факт переполнения? Не теоретически, а по делу. Желательно не теряя эффективности.

Для этого в компиляторах GCC и Clang есть соответствующие встроенные функции.

Date: 2024-09-02 07:13 (UTC)
From: [personal profile] vsold_1986
Интересно, что в борланде подобные вопросы автоматически решались с помощью исключений (exception), и, видимо, их отлов в критических местах с помощью блока catch не приводил к какому-то существенному падению производительности.
Перейдя же на Qt, я с неприятным удивлением обнаружил, что ничего тут не бросается (throw) и подобные ситуации надо обрабатывать ручками.
Очень странно, что в стандарте языка это никак не оговорено, поскольку ситуация типичная и очень требует универсального решения.

Date: 2024-09-02 08:30 (UTC)
From: [personal profile] chabapok
> Очень странно, что в стандарте языка это никак не оговорено, поскольку ситуация типичная и очень требует универсального решения.

в с23 есть "#include
[Error: Irreparable invalid markup ('<stdckdint.h>') in entry. Owner must fix manually. Raw contents below.]

> Очень странно, что в стандарте языка это никак не оговорено, поскольку ситуация типичная и очень требует универсального решения.

в с23 есть "#include<stdckdint.h>", там есть всякие ckd_add

(правда это уже как мертвому припарка)
Edited Date: 2024-09-02 08:31 (UTC)

Date: 2024-09-02 08:38 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
А то, что и деление может давать переполнение (MININT/-1), до тупых не дошло?

Date: 2024-09-02 11:27 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Хм, даже не знаю, в JVM вообще есть что-нибудь такое или нет.

Date: 2024-09-02 20:28 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
О! Я и не слыхивал. Спасибо за подсказку!

Date: 2024-09-02 15:16 (UTC)
sun_jr: (Default)
From: [personal profile] sun_jr
Спускаться ниже, к железу, и отлавливать carry bit руками?