|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||||||
Как отловить переполнение границ типа (INT)?23.02.2015, 04:07. Показов 31534. Ответов 69
Метки нет (Все метки)
Сразу напишу пример для наглядности:
И это лишь один момент из интересующих который выведет не верный результат... Ещё один:
Читал что некоторые создают особый тип (эквивалентный например 64 битному), т.к. границы будут дальше, то и результат можно будет сравнить полученное число с текущим, однако всё же границы останутся (теперь на пороге 64 битного числа), и подобный метод не подойдёт, т.к. за границы всё равно может выйти число. Так как в арифметических операциях предотвратить подобное? П.С. желательно чтоб примеры\инфа была бы применима в динамических переменных, т.е. на этап уже запуска без среды программирования. (собственно из уже получившейся программы)
0
|
|||||||||||
| 23.02.2015, 04:07 | |
|
Ответы с готовыми решениями:
69
отловить переполнение типа данных Как обойти переполнение int? Напишите перегруженную функцию power (), которая принимает два целочисленных параметра типа int и возвращает целочисленное значение типа int |
| 23.02.2015, 13:39 | |
|
nmcf, насчет менее убогой системы типов - я слышал краем уха, что какие-то Си-компиляторы последнее время позволяют задавать целый тип любой разрядности в байтах. Что могу сказать - давно пора. А насчет "громоздкого умножения и деления" - не более "громоздкое", чем реализация оного для интов на 8-битных платформах - те же последовательные однобайтовые операции. А вспоминая мой недавний нудёж про возможное отсутствие мулов и дивов в списке аппаратных инструкций и тем не менее реализацию компилятором и умножения и деления многобайтовых типов - вышеупоминаемая "громоздкость" не добавляет никакого качественного усложнения концепции.
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 23.02.2015, 13:43 | |
|
Громоздкость будет в записи этого на ассемблере.
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 23.02.2015, 13:58 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 23.02.2015, 14:07 | ||
|
Вы осознаете какую цену придется заплатить за подобного рода проверки? Кому нужно - могут склепать какой нибудь класс чисел с проверками и исключениями. Но в том, что касается фундаментального int, стандарт языка напротив стремится максимально оптимизировать вычисления.
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 23.02.2015, 14:23 | |||
|
2) Ключевое слово arithmetic_flags дающее прямой доступ к процессорным флагам содержащим данные о результате последней арифметической операции. Ну да, с оговорками про ухудшение оптимизации и зависимость реализации от платформы. 3) Синтаксическое правило по которому int*int="как удобно процессору" (вообще-то, 32-битовое на 32-битовое внутри x86 дает 64-битовое. Он его по двум 32-битовым регистрам распихивает). Опять же, черт с ними, с оговорками про зависимость от платформы.
0
|
|||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
||
| 23.02.2015, 14:51 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||
| 23.02.2015, 15:12 | |||||||||||
|
хотя сама практика - плодить ключевые слова для обработки частных случаев немного напрягает. поскольку неизбежно влечет за собой разбухание ключевых слов языка. Грубо говоря, если узаконить try_arithmetic_overflow, то это создаст прецедент, и захочется узаконить ещё 100500 разных ключевых слов под разные ситуативные моменты. В стандарте языка это называется "промоушен типов". Сложение двух short даст int, например.
http://rextester.com/KNZN1500
Промоушен действуют только на те модификаторы, чей эффект даёт sizeof меньше, чем sizeof(int). Это означает, что перемножение двух int всегда даст int независимо от его размера. А объясняется это тем, что sizeof(int) - это и есть "как удобно процессору" Добавлено через 2 минуты им место где нибудь в std/boost. и их не велосипедят заново под очередную платформу. для их создания не нужно ничего менять в существующем языке. мой посыл: сопровождение и потроха таких инструментальных средств - это не проблема его пользователей. Это проблема - разработчика. А сделать можно. Технически это все вполне себе реализуется.
0
|
|||||||||||
|
184 / 168 / 53
Регистрация: 27.01.2013
Сообщений: 788
|
|
| 23.02.2015, 15:17 | |
|
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 23.02.2015, 15:18 | |||
|
Что касается ассемблерных вставок, они скорее всего всю оптимизацию кода порушат. Грубо говоря, компилятор хотел положить переменную в регистр EAX. Но так как ассемблерная вставка ничего о желаниях компилятора не знает, пришлось класть переменную в память. Иначе как ассемблер до нее доберется?
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 23.02.2015, 15:23 | ||
|
Точно не знаю, что там происходит. Знаю только, что промоушен типов специально для того и существует, что бы оптимизировать по разрядной сетке машины. А это означает, что получать 64 бита вместо 32 там, где 32 - это sizeof(int) - не эффективно.
0
|
||
|
184 / 168 / 53
Регистрация: 27.01.2013
Сообщений: 788
|
||||||
| 23.02.2015, 15:26 | ||||||
|
мне больше всего понравился вариант:
при условии, что А и В не переполняют инт:
0
|
||||||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
|||||||
| 23.02.2015, 15:28 | |||||||
|
и каким переходом отлавливать переполнение не разрядной сетки, а диапазона чисел типа
0
|
|||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||
| 23.02.2015, 15:54 | ||||
|
1
|
||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
||
| 23.02.2015, 17:00 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 23.02.2015, 17:09 | ||
|
Если он такое поддерживает, то ничего не мешает перемножать/складывать/делить 64 битные числа. Если вам это нужно - пожалуйста. Другое дело, что в 99,(9)% всех случаев, 32 битного типа данных вполне достаточно для операций над 32битными числами. И это работает эффективно.
0
|
||
| 23.02.2015, 17:11 | |
|
Renji, плюсанул вам за некоторый рефреш моей памяти и при этом отсутствие придирок к моим неточностям в этой связи
![]() ЗЫ вся тема напоминает историю проверок выхода за границы массивов и цену которой за это платится. Реализовано во многих языках, делается гораздо проще контроля диапазона целых чисел, и то жрет ресурсы и в Сях летает быстрее потому что всех этих проверок нет. Но при всем при этом, компилятор мог бы быть более юзер-френдли и давать доступ к регистру состояний с джампом по меткам и управляемым поведением при арифметических операциях - специально для тех, кто хочет залезть руками и настроить под себя.
0
|
|
|
26 / 26 / 18
Регистрация: 16.01.2014
Сообщений: 161
|
|
| 23.02.2015, 17:18 | |
|
Ну, если уж очень хотите знать, то посмотрите класс Integer в JDK. Там есть метод, чтобы уловить переполнение, если я правильно помню.
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 23.02.2015, 17:45 | |||
|
0
|
|||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||
| 23.02.2015, 18:57 [ТС] | |||
|
0
|
|||
| 23.02.2015, 18:57 | |
|
Передать массив элементов(типа int) объекта, в функцию из массивов(типа int) Как передать 0 в функцию типа f (int, int&) Значение типа int нельзя присвоить сущности типа int
Как сравнить переменную типа String с переменной типа Int? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу)))
Критические ошибки, мешающие компиляции и. . .
|
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата)
Этот документ предназначен для того, чтобы новый чат Claude мог продолжить
работу без необходимости заново разбираться в. . .
|
|
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса
Калибровка параметров симбиотической модели: технический обзор
Содержание:
Введение
Постановка проблемы
Технические аспекты реализации
Процесс внедрения изменений
|
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0»
https:/ / ibb. co/ NnkGpfMd
Представленная интегрированная схема описывает непрерывную нелинейную. . .
|
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы
### Аннотация
Представлено исследование по разработке агентной модели микоризной. . .
|
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики
Контекст
Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
|