Программирование на JAVA

Навигация

Лекция 1. Что такое Java? История создания

Лекция 2. Основы объектно-ориентированного программирования

Лекция 3. Лексика языка

Лекция 4. Типы данных

Лекция 5. Имена. Пакеты

Лекция 6. Объявление классов

Лекция 7. Преобразование типов

Лекция 8. Объектная модель в Java

Лекция 9. Массивы

Лекция 10. Операторы и структура кода. Исключения

Лекция 11. Пакет java.awt

Лекция 12. Потоки выполнения. Синхронизация

Лекция 13. Пакет java.lang

Лекция 14. Пакет java.util

Лекция 15. Пакет java.io

Лекция 16. Введение в сетевые протоколы

Значение NaN можно получить, например, в результате следующих действий:

0.0/0.0 // деление ноль на ноль

(1.0/0.0)*0.0 // умножение бесконечности на ноль

Эта величина также представлена константами NaN в классах Float и Double.

Величины положительный и отрицательный ноль записываются очевидным образом:

0.0 // дробный литерал со значением положительного нуля +0.0 // унарная операция +, ее значение - положительный ноль -0.0 // унарная операция -, ее значение - отрицательный ноль

Все дробные значения строго упорядочены. Отрицательная беско­нечность меньше любого другого дробного значения, положительная -больше. Значения +0.0 и -0.0 считаются равными, то есть выражение 0.0==-0.0 истинно, а 0.0>-0.0 — ложно. Однако другие операторы разли­чают их, например, выражение 1.0/0.0 дает положительную бесконеч­ность, а 1.0/-0.0 — отрицательную.

Единственное исключение - значение NaN. Если хотя бы один из ар­гументов операции сравнения равняется NaN, то результат заведомо бу­дет false (для оператора != соответственно всегда true). Таким образом, единственное значение х, при котором выражение х!=х истинно,— имен­но NaN.

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

print(1e20f*1e20f); print(-1e200*1e200);

В результате получаем:

Infinity -Infinity

Если результат, напротив, получается слишком мал (underflow), то он просто округляется до нуля. Так же поступают и в том случае, когда ко­личество десятичных знаков превышает допустимое:

print(1e-40f/1e10f); // underflow для float

print(-1 е-300/1 е100); // underflow для double

float f=1e-6f;

print(f);

f+=0.002f;

print(f);

f+=3;

print(f);

f+=4000;

print(f);

Результатом будет:

0.0 -0.0

1.0E-6 0.002001 3.002001 4003.002

Как видно, в последней строке был утрачен 6-й разряд после десятич­ной точки.

Другой пример (из спецификации языка Java):

double d = 1е-305 * Math.PI; print(d);

for (int i = 0; i < 4; i++) print(d /= 100000);

Результатом будет:

3.141592653589793E-305

3.1415926535898E-310

3.141592653E-315

3.142E-320

0.0

Таким образом, как и для целочисленных значений, явное выписыва­ние в коде литералов, которые слишком велики (overflow) или слишком