Вещественные типы и класс Math
Тип | Размер | Диапазон | Описание |
float | 4 байта (32 бит) | 1.5*10-45..3.4*1038 | “Одинарная” точность, 7-8 значащих десятичных цифр мантиссы. Тип real*4 стандарта IEEE754 |
double | 8 байт (64 бит) | 5*10-324..1.7*10308 | “Двойная” точность, 15..16 значащих цифр мантиссы. Тип real*8 стандарта IEEE754 |
Оператор | Название | Пример | Примечание |
+ | Оператор сложения | x+y | В случае, когда операнды x и y имеют разные типы, действуют правила автоматического преобразования типов. |
– | Оператор вычитания | x-y | |
* | Оператор умножения | x*y | |
/ | Оператор деления | x/y | Результат является вещественным. В случае, когда операнды x и y имеют разные типы, действуют правила автоматического преобразования типов. |
% | Оператор остатка от целочисленного деления | x%y | Возвращается остаток от целочисленного деления x на y. В случае, когда операнды x и y имеют разные типы, действуют правила автоматического преобразования типов. |
Оператор | Название | Пример | Примечание |
= | Оператор присваивания | v=x | Сначала вычисляется выражение x, после чего полученный результат копируется в ячейку v |
++ | Оператор инкремента (увеличения на 1) | v++ ++v | эквивалентно v=v+1 |
-- | Оператор декремента (уменьшения на 1) | v-- --v | эквивалентно v=v-1 |
+= | v+=x | эквивалентно v=v+x | |
-= | v-=x | эквивалентно v=v-x | |
*= | v*=x | эквивалентно v=v*x | |
/= | v/=x | эквивалентно v=v/x | |
%= | v%=x | эквивалентно v=v%x |
Математические функции, а также константы “пи” (Math.PI) и “е” (Math.E ) заданы в классе Math, находящемся в пакете java.lang .
Для того, чтобы их использовать, надо указывать имя функции или константы, квалифицированное впереди именем класса Math.
Например, возможны вызовы Math.PI или Math.sin(x). При этом имя пакета java.lang указывать не надо – он импортируется автоматически. К сожалению, использовать математические функции без квалификатора Math, не получается, так как это методы класса.
Константы в классе Math заданы так:
public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;
Модификатор static означает, что это переменная класса; final означает, что в классе-наследнике переопределять это значение нельзя.
В приведённой ниже таблицы величины x,y,angdeg,angrad имеют тип double, величина a – тип float, величины m, n – целые типов long или int. Математические функции возвращают значения типа double, если примечании не указано иное.
Оператор класса Math | Примечание |
Тригонометрические и обратные тригонометрические функции | |
sin(x) | sin(x) - синус |
cos(x) | cos(x) - косинус |
tan(x) | tg(x) - тангенс |
asin(x) | arcsin(x) - арксинус |
acos(x) | arccos(x) - арккосинус |
atan(x) | arctg(x) - арктангенс |
atan2(y, x) | Возвращает угол, соответствующий точке с координатами x,y, лежащий в пределах . |
toRadians(angdeg) | angdeg / 180.0 * PI; - перевод углов из градусов в радианы. |
toDegrees(angrad) | angrad * 180.0 / PI; - перевод углов из радиан в градусы. |
Степени, экспоненты, логарифмы | |
exp(x) | ex - экспонента |
expm1(x) | ex-1. При x, близком к 0, даёт гораздо более точные значения, чем exp(x)-1 |
log(x) | ln(x) – натуральный логарифм. |
log10(x) | log10(x) – десятичный логарифм. |
log1p(x) | ln(1+x). При x, близком к 0, даёт гораздо более точные значения, чем log(1+x) |
sqrt(x) | - квадратный корень |
cbrt(x) | - кубический корень |
hypot(x,y) | - вычисление длины гипотенузы по двум катетам |
pow(x, y) | xy – возведение x в степень y |
sinh(x) | sh(x)= – гиперболический синус |
cosh(x) | ch(x)= – гиперболический косинус |
tanh(x) | th(x)= – гиперболический тангенс |
Модуль, знак, минимальное, максимальное число | |
abs(m) abs(x) | Абсолютное значение числа. Аргумент типа int, long, float или double. Результат того же типа, что аргумент. |
signum(a) signum(x) | Знак числа. Аргумент типа float или double. Результат того же типа, что аргумент. |
min(m,n) min(x,y) | Минимальное из двух чисел. Аргументы одного типа. Возможны типы: int, long, float, double. Результат того же типа, что аргумент. |
max(m,n) max(x,y) | Максимальное из двух чисел. Аргументы одного типа. Возможны типы: int, long, float, double. Результат того же типа, что аргумент. |
Округления | |
ceil(x) | Ближайшее к x целое, большее или равное x |
floor(x) | Ближайшее к x целое, меньшее или равное x |
round(a) round(x) | Ближайшее к x целое. Аргумент типа float или double. Результат типа long, если аргумент double, и типа int – если float. То же, что (int)floor(x + 0.5). |
rint(x) | Ближайшее к x целое. |
ulp(a) ulp(x) | Расстояние до ближайшего большего чем аргумент значения того же типа (“дискретность” изменения чисел в формате с плавающей точкой вблизи данного значения). Аргумент типа float или double. Результат того же типа, что аргумент. |
Случайное число, остаток | |
random() | Псевдослучайное число в диапазоне от 0.0 до 1.0. При этом 0 ≤ Math.random() < 1. |
IEEEremainder(x,y) | Остаток от целочисленного деления x/y, то есть x-y*n, где n – результат целочисленного деления |
Также имеются методы оболочечных классов Float и Double, обеспечивающие преобразование строкового представления числа в значение типа Float или Double:
Float.parseFloat(строка)
Double.parseDouble(строка)
Например, если в экранной форме имеются текстовые пункты ввода jTextField1 и jTextField2, преобразование введённого в них текста в числа может проводиться таким образом:
float f1= Float.parseFloat(jTextField1.getText());
double d1= Double.parseDouble(jTextField2.getText());
Иногда вместо класса Math ошибочно пытаются использовать пакет java.math, в котором содержатся классы BigDecimal, BigInteger, MathContext, RoundingMode. Класс BigDecimal обеспечивает работу с десятичными числами с произвольным числом значащих цифр – в том числе с произвольным числом цифр после десятичной точки. Класс BigInteger обеспечивает работу с целыми числами произвольной длины. Классы MathContext и RoundingMode являются вспомогательными, обеспечивающими настройки для работы с некоторыми методами классов BigDecimal и BigInteger.