Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
// пример вызовет ошибку компиляции
float f = 1e40f; // значение слишком велико, overflow
Напомним, что если в конце литерала стоит буква F или f, то литерал рассматривается как значение типа float. По умолчанию дробный литерал имеет тип double, при желании это можно подчеркнуть буквой D или d.
Над дробными аргументами можно производить следующие операции:
• операции сравнения (возвращают булевское значение)
• <,<=, >, >=
• числовые операции (возвращают числовое значение)
• унарные операции + и -
• арифметические операции +, -, *, /, %
• операции инкремента и декремента (в префиксной и постфиксной форме): ++ и --
• оператор с условием ? :
• оператор приведения типов
• оператор конкатенации со строкой +
Практически все операторы действуют по тем же принципам, которые предусмотрены для целочисленных операторов (оператор деления с остатком % рассматривался в предыдущей лекции, а операторы ++ и - - также увеличивают или уменьшают значение переменной на единицу). Уточним лишь, что операторы сравнения корректно работают и в случае сравнения целочисленных значений с дробными. Таким образом, в основном необходимо рассмотреть вопросы переполнения и преобразования типов при вычислениях.
Для дробных вычислений появляется уже два типа переполнения — Overflow и underflow. Тем не менее, Java и здесь никак не сообщает о возникновении подобных ситуаций. Нет ни ошибок, ни других способов обнаружить их. Более того, даже деление на ноль не приводит к некорректной ситуации. А значит, дробные вычисления вообще не порождают никаких ошибок.
Такая свобода связана с наличием специальных значений дробного типа. Они определяются спецификацией ШЕЕ 754 и уже перечислялись в лекции 3:
• положительная и отрицательная бесконечности (positive/negative infinity);
• значение "не число", Not-a-Number, сокращенно NaN;
• положительный и отрицательный нули.
Все эти значения представлены как для типа float, так и для double. Положительную и отрицательную бесконечности можно получить следующим образом:
1 f/Of // положительная бесконечность, тип float -1d/0d //отрицательная бесконечность, тип double
Также в классах Float и Double определены константы POSITIVEJNFINITY и N EGATIVEJ N Fl NITY. Как видно из примера, такие величины получаются при делении конечных величин на ноль.