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.