Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Умножение, деление и остаток от деления (лаб2)

Операция умножения (*) возвращает результат перемножения двух операндов. Стандартная операция умножения определена для типов int, uint, long, ulong, float, double и decimal. К величинам других типов ее можно применять, если для них возможно неявное преобразование к этим типам (см. рис. 3.1). Тип результа­та операции равен «наибольшему» из типов операндов, но не менее int.

Если оба операнда целочисленные или типа decimal и результат операции слиш­ком велик для представления с помощью заданного типа, генерируется исключение System.OverflowException (В проверяемом контексте. В непроверяемом исключение не выбрасывается, зато отбрасываются избыточные биты).

Все возможные значения для вещественных операндов приведены в табл. 3.2. Символами х и у обозначены конечные положительные значения, символом z — результат операции вещественного умножения. Если результат слишком велик для представления с помощью заданного типа, он принимается равным значению «бесконечность», если слишком мал, он принимается за 0. NaN (not a number) означает, что результат не является числом.

Таблица 3.2. Результаты вещественного умножения

* +y -y +0 -0 +∞ -∞ NaN
+z -Z +0 -0 +∞ -∞ NaN
-x -z +Z -0 +0 -∞ +∞ NaN
+0 +0 -0 +0 -0 NaN NaN NaN
-0 -0 +0 -0 +0 NaN NaN NaN
+∞ +∞ -∞ NaN NaN +∞ -∞ NaN
-∞ -∞ +∞ NaN NaN -∞ +∞ NaN
NaN NaN NaN NaN NaN NaN NaN NaN

Операция деления (/) вычисляет частное от деления первого операнда на второй. Стандартная операция деления определена для типов int, uint, long, ulong, float, double и decimal. К величинам других типов ее можно применять, если для них существует неявное преобразование к этим типам. Тип результата определяется правилами преобразования (см. рис. 3.1), но не меньше int.

Если оба операнда целочисленные, результат операции округляется вниз до ближайшего целого числа. Если делитель равен нулю, генерируется исключение System.DivideByZeroException.

Если хотя бы один из операндов вещественный, дробная часть результата деления не отбрасывается, а все возможные значения приведены в табл. 3.3. Символами х и у обозначены конечные положительные значения, символом z — результат операции вещественного деления. Если результат слишком велик для представ­ления с помощью заданного типа, он принимается равным значению «бесконечность», если слишком мал, он принимается за 0.

Таблица 3.3. Результаты вещественного деления

/ +y +0 -0 +∞ -∞ NaN
+z -z +∞ -∞ +0 -0 NaN
-x -z +z -∞ +∞ -0 +0 NaN
+0 +0 -0 NaN NaN +0 -0 NaN
-0 -0 +0 NaN NaN -0 +0 NaN
+∞ +∞ -∞ +∞ -∞ NaN NaN NaN
-∞ -∞ +∞ -∞ +∞ NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN

Для финансовых величин (тип decimal) при делении на 0 и переполнении генериру­ются соответствующие исключения, при исчезновении порядка результат равен 0.

Операция остатка от деления (%) также интерпретируется по-разному для це­лых, вещественных и финансовых величин. Если оба операнда целочисленные, результат операции вычисляется по формуле
х-(х/у)*у. Если делитель равен нулю, генерируется исключение System.DivideByZeroException. Тип результата опе­рации равен «наибольшему» из типов операндов, но не менее int (см. рис. 3.1).

Если хотя бы один из операндов вещественный, результат операции вычисляется по формуле
x-n*y, где n — наибольшее целое, меньшее или равное результату деления х на у. Все возможные комбинации значений операндов приведены в табл. 3.4. Символами х и у обозначены конечные положительные значения, символом z — результат операции остатка от деления.


Таблица 3.4. Результаты вещественного остатка от деления

% +y -y +0 -0 +∞ -∞ NaN
+x +z z NaN NaN x x NaN
-x -z -z NaN NaN -x -x NaN
+0 +0 +0 NaN NaN +0 +0 NaN
-0 -0 -0 NaN NaN -0 -0 NaN
+∞ NaN NaN NaN NaN NaN NaN NaN
-∞ NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN

Для финансовых величин (тип decimal) при получении остатка от деления на 0 и при переполнении генерируются соответствующие исключения, при исчезновении порядка результат равен 0. Знак результата равен знаку первого операнда.

Еще раз обращаю ваше внимание на то, что несколько операций одного приори­тета выполняются слева направо. Для примера рассмотрим выражение 2/х*у. Деление и умножение имеют один и тот же приоритет, поэтому сначала 2 делится на х, а затем результат этих вычислений умножается на у. Иными словами, это выражение эквивалентно формуле

Если же мы хотим, чтобы выражение х*у было в знаменателе, следует заклю­чить его в круглые скобки или сначала поделить числитель на х, а потом на у, то есть записать как 2/(х*у) или 2/х/у.

<== предыдущая лекция | следующая лекция ==>
Явное преобразование типа | Операции сдвига
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 350; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.