Loading...
denka avatar denka 52 Точки

Добри начини за предотвратяване на overflow

Здравейте,

Всеки път като пиша програма, която ще прави математически изчисления се замислям за това: 

1. errno променливата - Ако се четат параметри от входа и след това се викат функциите strto... се получава грешка там.

2. При самите математически операции: Позачетох се в тази тема: http://stackoverflow.com/questions/199333/how-to-detect-integer-overflow-in-c-c - все още не съм я изчела много подробно, но гледам различни варианти като предваритени изчисляния или проверки на регистри.

Та като приключа с домашното този път мисля да си поиграя с тези неща и ако имате впечатления, тествали сте разни неща по въпроса ще се радвам да споделите мнение.

Тагове:
2
Linux Курсове
vladiant avatar vladiant 41 Точки

За четенето на параметри - препоръчвам да се чете цял ред, чиято максимална дължина е ограничена системно. Размерът се определя от макроса LINE_MAX.

Препълването на целочислени типове със знак е undefined behavior, т.е. трябва да се избягва. При типовете без знак е добре дефинирано:

6.2.5 Types, paragraph 9

A computation involving unsigned operands can never overflow, because a result that cannot be represented by the resulting unsigned integer type is reduced modulo the number that is one greater than the largest value that can be represented by the resulting type.

За числа с плаваща запетая в С 99 се използва 

http://www.cplusplus.com/reference/cmath/fpclassify/
0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.