vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2024-09-01 10:41 pm

Арифметика с переполнением

Как сложить/вычесть/умножить два числа на Си и отловить факт переполнения? Не теоретически, а по делу. Желательно не теряя эффективности.

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

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

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

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

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

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

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