Модуль: Вещественные числа


Вещественные числа

float r = 5.0f
или
double r = 5.0
Значение 5.0 - число, представленное в виде десятичной дроби (имеет целую и дробную часть). В информатике такие числа называются вещественными
Вещественное число - это число, в котором есть целая и дробная части. Целая и дробная часть отделяются друг от друга точкой, а не запятой как в математике.
Даже если дробная часть числа равна нулю, как в переменной \(r\) в примере, все равно транслятор создаст в памяти вещественную переменную. Точка, как бы сигнал для транслятора, что необходимо создать именно вещественную переменную. 

Очень большие и очень маленькие числа  записываются с помощью "плавающей точки" (в так называемом научном формате).  
В научном формате число представляется в виде мантиссы(значащей части числа) и порядка. При записи мантисса и порядок отделяются друг от друга буквой e (обозначает 10 в какой-то степени). 
Например, можно сохранить в переменной значение заряда электрона ( \(1,60217662 \times 10^{-19}\) Кл), записав в следующем виде
float El = 1.60217662e-19f //для положительного порядка знак + можно не записывать
или 
double El = 1.60217662e-19
Практически все вещественные числа не могут храниться в памяти компьютера с идеальной точностью, так как под их хранение выделяется ограниченное число бит. Поэтому при вычислениях с вещественными числами ошибки, связанные с неточностью представления накапливаются. Причем чем меньше места выделено, тем больше будет эта ошибка. Для того, чтобы уменьшить ошибку в Java используют тип double, который хранит в памяти вещественное число с двойной точностью (занимает в памяти восемь байт, в то время как тип \(float \)- 4 байта)

Задача для тренировки:

Вещественные числа

Ввод и вывод вещественных чисел

Ввод

Ввести несколько вещественных переменных из входного потока и записать их в переменные можно стандартным способом:
double x = in.nextDouble();
float y = in.nextFloat();
Первое число попадает в переменную \(x\), второе - в \(y\)

Вывод

В Java несколько способов вывода вещественных чисел.

1)  System.out.printf для простого вывода в консоль
По умолчанию при использовании printf вещественные числа выводятся с точностью до 6 знаков после запятой. Но бывают случаи, что нужно вывести с другой точностью. В этом случае необходимо указать сколько знакомест отвести после запятой.
double a=0.5;
System.out.printf("%f",a);     // на экране 0.500000
System.out.printf("%.2f",a);   // на экране 0.5
System.out.printf("%10.2f",a); // можно задать общее число позиций, отводимых на вывод числа
System.out.printf("%.2e",a);   // вывод числа в научном формате с точность в 2 знака
2) DecmialFormat для получения строки из числа с помощью заданного шаблона
Класс DecmialFormat позволяет управлять выводом начальных и конечных нулей, префиксов и суффиксов, разделителей тысяч и десяти тысяч, но это делает код немного более сложным.
double a = 123.45;
DecimalFormat df = new DecimalFormat("#.###");  
String formatted = df.format(a); System.out.println(formatted);        //123.45

Ввод Шаблон Вывод Примечание
123.45 #.# 123.5 Выводится до одного знака с округлением
123.45 #.### 123.45 Выводится все число без незначащих нулей
123.45 #.0 123.5 Выводится до одного знака с округлением
123.45 #.000 123.450 Выводится до третьего знака с незначащим нулем на конце

Задача для тренировки:

Ввод и вывод вещественных чисел

Операции с вещественными числами. Класс Math

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

ЗАПОМИНАЕМ
1
при явном преобразовании типа ( float x=1.5f; int y = int (x) )  -  дробную часть вещественного числа отсекается (y = 1) 
2 функция Math.floor (x) -  возвращает наибольшее целое, меньшее или равное \(x\) (округление "вниз")
3 функция Math.ceil (x) -  возвращает наименьшее целое, большее или равное \(x\) (округление "вверх")

Приведем наиболее полезные функции, содержащиеся в модуле cmath.

Функция Описание
Округление
round(x) Округляет число до ближайшего целого. Если дробная часть числа равна 0.5, то число округляется до ближайшего целого числа. 
floor(x) Округляет число вниз («пол»), при этом floor(1.5) == 1floor(-1.5) == -2
ceil(x) Округляет число вверх («потолок»), при этом ceil(1.5) == 2ceil(-1.5) == -1
abs(x) Модуль (абсолютная величина).
Корни, логарифмы
sqrt(x) Квадратный корень. Использование: y = sqrt(x)
pow(x, y) Возводит x в степень y. \(x^y\)
log(x) Натуральный логарифм. 
exp(x) Основание натуральных логарифмов e = 2,71828...
Тригонометрия
sin(x) Синус угла, задаваемого в радианах
cos(x) Косинус угла, задаваемого в радианах
tan(x) Тангенс угла, задаваемого в радианах
asin(x) Арксинус, возвращает значение в радианах
acos(x) Арккосинус, возвращает значение в радианах
atan(x) Арктангенс, возвращает значение в радианах
atan2(y, x) Полярный угол (в радианах) точки с координатами (x, y).

Пример использования:
Возведения 2 в степень, т.к. pow возвращает double в качестве ответа, то нужно преобразование в тип int.
public class Main {
    public static void main(String[] args) {
       int a  = 2;
       int b = (int)Math.pow(a,2);
    }
}