Защитить переменные C++ от получения OverFlow? если значение меньше UpperBound любого типа данных

Я хочу защитить мою переменную от хранения значений переполнения.

Я рассчитываю потери на каждом уровне дерева и на некоторых этапах.

  1. он дает значения, такие как 4.94567e+302; Является ли это значение правильным. Если я сравниваю его (как минимум, максимум и т. д.) с любыми другими значениями. Даст ли он правильный ответ?
  2. Иногда это дает отрицательный ответ, но Формула не может дать отрицательные значения, так что, конечно, этот тип неправильный

Я хочу сделать следующее в моем коде C++.

Например:

long double loss;  //8 Bytes Floating Number
loss=calculate_loss(); 

if(loss value is greater than Capacity)
do
store 8 bytes in loss abd neglect remaining;
end if

2 ответа

Если ваша емкость должна быть ограничена максимальной или минимальной емкостью типа данных double (или float), вы можете использовать исключения с плавающей запятой (не путать с исключениями C++). Их сигнализация должна быть включена в параметрах компилятора, и вы можете сопоставить их с исключениями C++, обнаружив переполнение типа данных.

Вот страница MSDN, которая довольно хорошо описывает исключения FP. Внизу страницы вы найдете примеры того, как сопоставить это с исключениями C++. http://msdn.microsoft.com/en-us/library/aa289157%28v=vs.71%29.aspx

E сть limits.h в C++, но это

if(loss value is greater than Capacity)

не может работать по определению. Значение в loss неможет быть больше своего собственного максимума типа данных.

Ваше примерное значение в 5 раз 10^302 действительно подозрительно велико. В сочетании с вашим утверждением, что вы иногда получаете неожиданные отрицательные значения, я советую вам внимательно взглянуть на свои расчеты.

Разумное предположение: вы возитесь с указателями и смешиваете указатели с целыми числами и числами с плавающей запятой. Но никто не может сказать, не видя код.

Другие вопросы по тегам