Определите, приведет ли операция к переполнению?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Определите, приведет ли операция к переполнению?

Сообщение Anonymous »

В моем приложении есть несколько классов, которые представляют физические единицы, например температуру. Эти классы могут иметь некоторые связанные с ними и измененные единицы измерения, такие как Цельсий и Кельвин. У них также есть определяемые пользователем значения максимального и минимального значения.

Когда я хочу изменить единицы измерения, я получаю коэффициент преобразования между двумя заданными единицами, а затем изменяю минимальное значение , Max и Data внутри класса, выполнив некоторую арифметическую операцию с коэффициентом преобразования.

Код: Выделить всё

Double ConversionFactor = GetConversionFactor(curUnits, newUnits);
Units = newUnits;
Min *= ConversionFactor;
Max *= ConversionFactor;
Data *= ConversionFactor;
Проблема, с которой я столкнулся, заключается в том, что иногда пользователь может разрешить, чтобы максимальные и минимальные значения были MinValue и MaxValue некоторого типа, например как двойной. Если пользователь изменит единицы измерения, коэффициент преобразования которых больше 1, это приведет к переполнению.

Есть ли в C# способ определить, произойдет ли это переполнение как при переполнении, так и при опустошении?
Из того, что я могу сказать с помощью некоторых тестов, я думаю, мне просто нужно проверить, что результат операции не равен положительной или отрицательной бесконечности? Если да, то я могу просто вернуть значение либо MinValue, либо MaxValue.

А еще бонусный вопрос. В ходе тестирования я обнаружил, что если я создам Double max = Double.MaxValue и добавлю к нему что-нибудь маленькое, например 100. Значение не меняется.

Почему это? Существует ли какой-то порог между MaxValue и PositiveInfinity, потому что точность при этом очень низкая большая ценность?

Подробнее здесь: https://stackoverflow.com/questions/337 ... n-overflow
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»