7. JAVA – klasa Math i przydatne funkcje


Podczas pisania programów niezbędne jest wykonywanie działań matematycznych, zarówno tych prostych jak i złożonych. Nie musimy za każdym razem samodzielnie pisać funkcji, które będą wykonywały skomplikowane operacje matematyczne, bo zostały one już stworzone i zgrupowane w klasie Math – możemy z nich korzystać.

Niektóre klasy, które chcemy użyć musimy importować do programu. Klasa Math nie wymaga tego od nas, jest załadowana automatycznie, a co za tym idzie możemy od razu korzystać z jej dobrodziejstw.

Oto przydatne funkcje:

 

Math.abs()

Wartość bezwzględna (moduł z liczby)

System.out.println(Math.abs(-5)); // abs(int a) wyświetli 5
System.out.println(Math.abs(-1254879L)); // abs(long a) wyświetli 1254879
System.out.println(Math.abs(-2.548763F)); // abs(float a) wyświetli 2.548763
System.out.println(Math.abs(-3.54875158874D)); //abs(double a) wyświetli 3.54875158874

 

Math.round()

Zaokrągla liczbę zmiennoprzecinkową

System.out.println(Math.round(2.123456F)); //round(float a) wyświetli 2
System.out.println(Math.round(3.49345678910D)); //round(double a) wyświetli 3

 

Math.ceil()

Zaokrągla ułamki w górę

System.out.println(Math.ceil(5.12345678910D)); //ceil(double a) wyświetli 6.0
System.out.println(Math.ceil(5.52345678910D)); //ceil(double a) wyświetli 6.0

 

Math.floor()

Zaokrągla ułamki w dół

System.out.println(Math.floor(5.12345678910D)); //ceil(double a) wyświetli 5.0
System.out.println(Math.floor(5.52345678910D)); //ceil(double a) wyświetli 5.0

 

Math.hypot()

Oblicza długość przeciwprostokątnej trójkąta prostokątnego. Math.hypot() zwraca długość przeciwprostokątnej trójkąta prostokątnego, o długościach przyprostokątnych x i y, lub odległość punktu o współrzędnych (x, y) od początku układu współrzędnych. Jest to równoważne wyrażeniu sqrt(x*x + y*y).

System.out.println(Math.hypot(2.0d, 5.0d)); //hypot(double x, double y) wyświetli 5.385164807134504

 

Math.log()

Logarytm naturalny o podstawie e.

System.out.println(Math.log(2.0d)); //log(double a) wyświetli 0.6931471805599453

Math.log10()

Logarytm naturalny o podstawie 10.

System.out.println(Math.log10(2.0d)); //log(double a) wyświetli 0.3010299956639812

Math.log1p()

Logarytm naturalny o podstawie sumy argumentu i 1.

System.out.println(Math.log1p(2.0d)); //log(double x) wyświetli 1.0986122886681096

 

Math.PI()

Korzystanie z liczby PI – stałej wbudowanej

System.out.println(Math.PI); //wyświetli 3.141592653589793

 

Math.pow()

Potęgowanie – pierwszy parametr to podstawa, drugi parametr to wykładnik

System.out.println(Math.pow(2.0d, 2.0d)); //pow(double a) wyświetli 4.0

 

Math.sqrt()

Pierwiastek kwadratowy.

System.out.println(Math.sqrt(16.0d)); //sqrt(double a) wyświetli 4.0

 

Math.max() i Math.min()

Math.max() znajduje największą liczbę, a Math.min() najmniejszą.

//Math.max()
System.out.println(Math.max(12, 2)); // max(int a, int b) wyświetli 12
System.out.println(Math.max(1254879L, 2222222L)); // max(long a, long b) wyświetli 2222222
System.out.println(Math.max(12.123456f, 2.123456f)); // max(float a, float b) wyświetli 12.123456
System.out.println(Math.max(12.1234567891011d, 2.1234567891011d)); //max(double a, double b) wyświetli 12.1234567891011

//Math.min()
System.out.println(Math.min(12,2)); // min(int a, int b) wyświetli 12
System.out.println(Math.min(1254879L, 2222222L)); // min(long a, long b) wyświetli 1254879
System.out.println(Math.min(12.123456f,2.123456f)); // min(float a, float b) wyświetli 2.123456
System.out.println(Math.min(12.1234567891011d,2.1234567891011d)); //min(double a, double b) wyświetli 2.1234567891011

 

Funkcje trygonometryczne

Math.toRadians()

Przelicza stopnie na radiany.

System.out.println(Math.toRadians(60.0d)); //toRadians(double angdeg) wyświetli 1.0471975511965976

 

Math.toDegrees()

Przelicza radiany na stopnie.

System.out.println(Math.toDegrees(1.0471975511965976d)); //toDegrees(double angrad) wyświetli 59.99999999999999

 

Math.sin()

Oblicza sinus kąta. Kąt musi zostać podany w radianach.

double x = Math.toRadians(60.0d);
System.out.println(Math.sin(x));

//skrócony zapis
System.out.println(Math.sin(Math.toRadians(60)));

 

Math.cos()

Oblicza cosinus kąta. Kąt musi zostać podany w radianach.

double y = Math.toRadians(60.0d);
System.out.println(Math.cos(y));
System.out.println(Math.cos(Math.toRadians(60)));

 

Math.tan()

Oblicza tangens kąta. Kąt musi zostać podany w radianach.

double z = Math.toRadians(60.0d);
System.out.println(Math.tan(z));
System.out.println(Math.tan(Math.toRadians(60)));

 

BigInteger oraz BigDecimal – czyli operujemy na wielkich liczbach

W trakcie pisania programu może okazać się, że potrzebujemy skorzystać z bardzo dużych liczb, których zakres wychodzi poza znane typy danych. Przychodzą nam wtedy z pomocą specjalnie do tego stworzone klasy (klasy, nie typy) – BigInteger oraz BigDecimal.

Klasy te nie zostały omówione w temacie 4. JAVA – typy danych, ani w 6. JAVA – klasa Integer i przydatne funkcje, ponieważ są to specjalne klasy należące do pakietu math. Do ich wykorzystania konieczny jest import tego pakietu, a listę możliwych pakietów Javy znajdziecie na stronie dokumentacji.

Przykład zastosowania takiego rozwiązania poniżej:

package com.cku.basics;

/*
Intellij automatycznie dodaje nam biblioteki
import java.math.BigDecimal;
import java.math.BigInteger;

jeżeli chcemy skrócić zapis możemy zastosować następującą konstrukcję:
*/
import java.math.*;

public class BigNumbers {
public static void main(String[] args) {
//bardzo duże liczby całkowite
BigInteger bigInt = new BigInteger("1234567891011121314151617181920"); //w ten sposób deklarujemy zmienną klasową, która staje się obiektem
bigInt = bigInt.add(new BigInteger("1234567891011121314151617181920")); //po stworzeniu obiektu, po kropce możemy korzystać z metod dla niej przewidzianych - w tym przykładzie wykonamy dodawanie
System.out.println("Wynik dodawania: " + bigInt);

//bardzo duże liczby rzeczywiste
BigDecimal bigDec = new BigDecimal("1234567891011.121314151617181920"); //w ten sposób deklarujemy zmienną klasową, która staje się obiektem
bigDec = bigDec.pow(2); //po stworzeniu obiektu, po kropce możemy korzystać z metod dla niej przewidzianych - w tym przykładzie potęga
System.out.println("Wynik potęgowania: " + bigDec);
}
}

Ćwiczenie:

Stwórz plik, w którym przetestujesz działanie wyżej wymienionych funkcji oraz wyświetl ich działanie z odpowiednimi opisami.