logo search
Методичка Java

3.4.Вещественные типы и класс 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.