Числа с плавающей точкой
Числа с плавающей точкой (или действительные числа) представлены типами float и double. Используются для хранения значений с точностью до определенного знака после десятичной точки.
double — это числа с двойной точностью, максимально приближённые к заданным или полученным в результате вычислений значениям. Используется в Java для любых математических вычислений (квадратный корень, синус, косинус,..).
float — менее точный тип с плавающей точкой. Используется очень редко с целью экономии памяти.
Пример объявления типов с плавающей точкой:
double d1 = 3.45;
float f1 = 34.456f;
Тип | Размер в байтах | Размер в битах | Возможные значения (от..до) | Значение по умолчанию |
---|---|---|---|---|
float | 4 | 32 | -3.4E+38..3.4E+38 (стандарт IEEE 754) | 0.0 |
double | 8 | 64 | -1.7E+308..1.7E+308 (стандарт IEEE 754) | 0.0 |
В языке Java есть три специальных числа плавающей точкой, которые используются для обозначения переполнения и ошибок:
- Положительная бесконечность - результат деления положительного числа на 0. Представлены константами
Double.POSITIVE_INFINITY
иFloat.POSITIVE_INFINITY
. - Отрицательная бесконечность - результат деления отрицательного числа на 0. Представлены константами
Double.NEGATIVE_INFINITY
иFloat.NEGATIVE_INFINITY.
NaN
(не число) - вычисление 0/0 или извлечение квадратного корня из отрицательного числа. Представлены константамиDouble.NaN
иFloat.NAN
.
Пример использования специальных чисел с плавающей точкой в арифметических выражениях:
public class Main {
public static void main(String[] args) {
int a = 7;
double b = 0.0;
double c = -0.0;
double g = Double.NEGATIVE_INFINITY;
System.out.println(a / b);
System.out.println(a / c);
System.out.println(b == c);
System.out.println(g * 0);
}
}
Числа с плавающей точкой нельзя использовать в финансовых расчетах, где ошибки округления недопустимы. Например, в результате выполнения оператора System.out. println(2.0 - 1.1)
будет выведено значение 0.8999999999999999, а не 0.9, как было бы логично предположить. Подобные ошибки связаны с внутренним двоичным представлением чисел. Как в десятичной системе счисления нельзя точно представить результат деления 1/3, так и в двоичной системе невозможно точно представить результат деления 1/10. Если же требуется исключить ошибки округления, то следует воспользоваться классом BigDecimal
.
Презентацию с видео можно скачать на Patreon.
Please log in or register to have a possibility to add comment.