2015-02-18 2 views
0

Я ищу ответ на вопрос из темы этого сообщения. У меня нет проблем, когда дело доходит до проверки переполнения целых чисел, но я не знаю, как обращаться с двойными переменными. Я был бы признателен, если бы кто-нибудь мог указать мне в правильном направлении.Как предотвратить двойное переполнение в C?

Заранее спасибо

+0

Проверьте это с 'длинной double' –

+0

http://www.codeproject.com/Articles/25294/Как избежать переполнения-сгущенной-а nd-Loss-of-Precision –

+1

@AlterMann: Нет гарантии, что 'long double' длиннее' double'. – MSalters

ответ

1

В IEEE-754, если режим округления roundTiesToEven (по умолчанию), вы можете обнаружить переполнение путем проверки в результате пейзажный для обычных операндов как

(IEEE-754 : 2008, 7,4 Переполнение) «roundTiesToEven и roundTiesToAway нести все перетекает ∞ со знаком промежуточного результата»

+0

Проверка бесконечности не зависит от режима округления. Но это зависит от того, насколько портативным он хочет быть; не все форматы с плавающей запятой имеют бесконечность. –

+2

Я упоминаю режим округления, потому что в IEEE-754 не все режимы округления несут переполнения до бесконечности, например roundTowardZero, который переносит в наибольшее конечное число формата. Вы также отмечаете, что не все форматы с плавающей запятой имеют бесконечность, но я обращаюсь к IEEE-754, где три бинарных формата имеют бесконечность. – ouah

Смежные вопросы