цілочисельна арифметика

Арифметичні операції з цілочисельними операндами виконуються відповідно до правил доповнення по модулю, тобто якщо значення виходить за межі допустимого діапазону зміни числових величин відповідного типу (наприклад, int або long), воно зменшується по модулю, який відповідає розміру цього діапазону. Тому результати цілочисельних операцій ніколи не приводять до переповнення розрядної сітки (overflow) змінної або зникнення значущих розрядів (втрати значущості - underflow) в ній - розряди числа можуть бути тільки перенесені.

При целочисленном розподілі залишок відкидається (наприклад, 7/2 дорівнює 3 і (-7) / 2 дорівнює -3). Результати застосування операторів ділення клітин і обчислення залишку по відношенню до аргументів цілих типів підкоряються наступним правилом:

Так що, 7% 2 є 1, а -7% 2 є -1. Якщо в якості операнд-дільник в виразах цілочисельного ділення і обчислення залишку задається нуль, операція вважається неприпустимою і генерується виключення типу ArithmeticException.

Арифметика з плаваючою комою

В процесі виконання арифметичних операцій над аргументами з плаваючою комою можливі переповнення розрядної сітки до нескінченності (результат перевищує верхню межу діапазону зміни значень типу float або double) і втрата значущості - нерідко до нуля (результат занадто малий для типу float або double). В результаті обчислення некоректних виразів (таких як, наприклад, розподіл нескінченності на нескінченність) виходить значення NaN - "не число» (not a number).

Арифметичні операції над кінцевими операндами з плаваючою комою, що задовольняють діапазонами точності представлення значень float і double, виконується цілком передбачувано. Правило присвоювання знака результату також традиційно: при множенні і діленні чисел з одним знаком результат позитивний, а якщо знаки різні - негативний.

Додавання двох нескінченностей дає в результаті таку ж нескінченність, якщо їх знаки однакові, і NaN - якщо знаки різні. При відніманні нескінченностей одного знака буде отримано значення NaN; віднімання нескінченностей з різними знаками дає в результаті нескінченність з тим знаком, який є у лівого операнда. Наприклад, (∞ - (-∞)) є ∞. Результат обчислення арифметичного виразу, одним з операндів якого є NaN, завжди дорівнює NaN. Переповнення дає в підсумку нескінченність відповідного знака, а втрата значущості - значення (можливо, нульовий) відповідного знака. При виконанні арифметичних операцій з плаваючою комою підтримується негативний нуль, - 0.0, який в контексті операторів порівняння дорівнює позитивному нулю, + 0.0. Хоча обидва нуля вважаються рівноцінними, в конкретних виразах вони здатні приводити до різних результатів. Так, наприклад, результат обчислення виразу 1f / 0f - дорівнює позитивної нескінченності, а вираження 1f / -0f - негативною нескінченності.

Якщо підсумком зникнення значущих розрядів є -0.0 і якщо -0.0 == 0.0, яким чином можна виявити факт отримання негативного нуля? Слід помістити тестоване нульове значення в вираз, де знак здатний себе проявити, і перевірити результат. Нехай, наприклад, x містить нульове значення; тоді вираз 1 / x дорівнюватиме негативною нескінченності, якщо x - негативний нуль, і позитивної нескінченності - в іншому випадку.

Правила виконання операцій з нескінченними величинами збігаються з тими, які прийняті в математиці. Алгебраїчне додавання будь-якої кінцевої величини з нескінченністю дає в результаті ту ж нескінченність. Наприклад, (-∞ + x) дорівнює -∞ при будь-якому кінцевому значенні x.

Нескінченні значення в Java-програмі задаються за допомогою символічних констант POSITIVE_INFINITY (позитивна нескінченність) і NEGATIVE_INFINITY (негативна нескінченність), оголошених в класах-оболонках Float і Double. Наприклад, Double. NEGATIVE_INFINITY вказує на версію значення негативної нескінченності, певну в класі Double.

Множення нескінченності на нуль дає в результаті NaN. При множенні нескінченності на нульове кінцеве значення буде отримана нескінченність відповідного знака.

Операції ділення клітин і обчислення залишку в застосуванні до аргументів з плаваючою комою здатні давати в результаті нескінченні значення або NaN, але ніколи не приводять до викидання винятків. Результати операцій ділення і обчислення залишку при різних комбінаціях значень аргументів представлені в таблиці 9.

Схожі статті