двойная защита переменных 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

0

Решение

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

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

1

Другие решения

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

if(loss value is greater than Capacity)

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

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

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

0

По вопросам рекламы [email protected]