Я думал, что это будет очень легко, но это привело к необходимости большего количества проверок, чем я хотел бы.
У меня есть этот код:
if (funcType == "Mul")
return (val1 * val2) <= int.MaxValue && (val1 * val2) >= int.MinValue;
if (funcType == "Add")
return (val1 + val2) <= int.MaxValue && (val1 + val2) >= int.MinValue;
if (funcType == "Sub")
return (val1 - val2) <= int.MaxValue && (val1 - val2) >= int.MinValue;
if (funcType == "Div")
return (val1 / val2) <= int.MaxValue && (val1 / val2) >= int.MinValue;
Iнужно проверить, если в результате расчетов получается число в диапазоне типа значения int.
Например,
int val1 = 1777777774;
int val2 = 477778777;
При сложении вместе результат равен -2039410745 * 1012.* (допустимое значение int) Но это не правильный ответ (так сказать), и поэтому проверка не работает должным образом.
Я полагаю, я мог бы объявить val1 и val2 как longs, чтобы предотвратить отрицательные результаты изатем проведите сравнение.
Было бы это безопасно (я бы все еще беспокоился о том, что результат будет превышать пределы при умножении), есть ли лучший способ, о котором вы могли бы подумать?
Многиеспасибо, Кохан.