Math

Obiekt Math przechowuje wartości matematyczne, zgromadzone jako własności i metody tego obiektu.
Przykładem takich metod jest funkcja Cosinus, lub np wartość Pi.

Własności:
E - Zwraca stałą Eulera, która wynosi ok. 2.71
LN2 - Zwraca logarytm dwóch, tj. ok. 0.69
LN10 - Zwraca logarytm z dziesięciu, tj. ok. 2.30
LOG2E - Zwraca logarytm o podstawie 2 z liczby E, czyli ok. 1.44
LOG10E - Zwraca logarytm o podstawie 10 z E, czyli ok. 0.43
PI - Zwraca wartość liczby Pi, czyli ok. 3.14
SQRT1_2 - Zwraca pierwiastek kwadratowy z 0.5, czyli ok. 0.70
SQRT2 - Zwraca pierwiastek kwadratowy z 2, czyli ok. 1.41
Metody
abs(liczba) - Zwraca wartość absolutną liczby
acos(liczba) - Zwraca arcus cosinus z liczby (podanej w radianach)
asin(liczba) - Zwraca arcus sinus z liczby (podanej w radianach)
atan(liczba) - Zwraca arcus tangens z liczby (podanej w radianach)
ceil(liczba) - Zwraca najmniejszą liczbę całkowitą, większą lub równą podanej liczbie
cos(liczba) - Zwraca cosinus liczby (podanej w radianach)
exp(liczba) - Zwraca wartość E podniesionej do potęgi wyrażonej podanym argumentem
floor(liczba) - Zwraca największą liczbę całkowitą mniejszą lub równą podanej liczbie
log(liczba) - Zwraca logarytm naturalny liczby
max(liczba1,liczba2) - Zwraca większą z dwóch liczb
min(liczba1,liczba2) - Zwraca mniejszą z dwóch liczb
pow(liczba1,liczba2) - Zwraca wartość liczby1 podniesionej do potęgi liczby2
random() - Zwraca wartość pseudolosową z przedziału 0 - 1
round(liczba) - Zwraca zaokrąglenie danej liczby do najbliższej liczby całkowitej
sin(liczba) - Zwraca sinus liczby (podanej w radianach)
sqrt(liczba) - Zwraca pierwiastek kwadratowy liczby
tan(liczba) - Zwraca tangens liczby (podanej w radianach)

Kilka przykładów zastosowania Obiektu Math:


var zmienna1 = 56.5;
var zmienna2 = 74.3;
document.write( Math.min(zmienna1,zmienna2) ); //wypisze sie 56.5
document.write( Math.round(Math.min(zmienna1,zmienna2)) ); //wypisze sie 57
document.write( Math.cos(0) ) //wypisze sie 1

Math.round(zmienna1) // da w rezultacie 56
Math.round(20.52) // da w rezultacie 21
Math.round(-10.21) // da w rezultacie -10
Math.round(-11.82) // da w rezultacie -12

Math.floor(zmienna1) // da w rezultacie 56
Math.floor(20.52) // da w rezultacie 20
Math.floor(-10.21) // da w rezultacie -11
Math.floor(-11.82) // da w rezultacie -12

Math.ceil(zmienna1) // da w rezultacie 57
Math.ceil(20.52) // da w rezultacie 21
Math.ceil(-10.21) // da w rezultacie -10
Math.ceil(-11.82) // da w rezultacie -11

Przykład wykorzystania Javascriptu do obliczania punktów zerowych funkcji:


//funkcja: f(x) = 4x2 + 10x + 4
var a = 4
var b = 10
var c = 4
var delta = Math.pow(b,2) - (4*a*c) //obliczamy deltę
var sqrtDelta = Math.sqrt(delta); //obliczamy pierwiastek kwadratowy delty
var x1 = (-b - sqrtDelta) / (2*a); //obliczamy pierwsze miejsce zerowe
var x2 = (-b + sqrtDelta) / (2*a); //obliczamy drugie miejsce zerowe

document.write('Delta = ' +delta+ '<BR>');
document.write('Pierwiastek Delty = ' +sqrtDelta+ '<BR>');
document.write('x1 = ' +x1);
document.write('x2 = ' +x1);

Kliknij tutaj aby przejść do strony z funkcjami generującymi liczby losowe. Funkcje te wykorzystują obiekt Math...

Dodatkowo Javascript udostępnia nam specjalny obiekt Number, który posiada takie właściwości jak maksymalna wartość, minimalna wartość itp. Więcej na jego temat możesz dowiedzieć się tutaj.

Mnożenie w Javascript

Można by pomyśleć, że wymnożenie w JS liczby 1,15 przez 3 nie powinno być wielkim wyzwaniem, gdyż wszyscy doskonale wiemy, że jest to po prostu 3,45. Proste, logiczne. Jednak nie do końca. Okazuje się, że w Javascript niektóre równania dają dość zaskakujące wyniki:


document.write( 1,15 * 3 ) //wypisze się 3.4499999999999997
document.write( 0.119 * 100 ) //wypisze się 11.899999
document.write( 51.02 - 3.8 )  //wypisze się 47.220000000000006

Jest to spowodowane specyfikacją ECMA, oraz specyficznym sposobem mnożenia.

Skąd się biorą takie cuda?
JavaScript przechowuje liczby zmiennoprzecinkowe jako liczby 64 bitowe zgodne ze standardem IEEE 754. Z powodu takiego właśnie zapisu w pewnych sytuacjach mogą pojawiać się takie różnice. W celu uzyskania bliższych informacji na ten temat warto zajrzeć pod adres:

http://www.psc.edu/general/software/packages/ieee/ieee.html

Niezależnie od tego, jaka jest przyczyna powyższego stanu rzeczy, musimy znaleźć jakieś rozwiązanie zastępcze.

Sprubujmy wykonać mnożenie 115 * 3


document.write( 115 * 3 ) //wypisze się 345

Otrzymujemy prawidłowy wynik, czyli 345, zatem wszystko jest w porządku. Wnioskiem jest więc, że arytmetyka przeprowadzana na liczbach całkowitych jest prawidłowo przeprowadzana. Możemy zatem z niej skorzystać, po czym wynik przekształcić z typu Number na String, dodając przy tym w odpowiednim miejscu przecinek dziesiętny.
Jeśli musimy zrobić jakieś dalsze wyliczenia, z powrotem przekształcamy napis na liczbę, usuwamy kropkę dziesiętną i liczymy.
Przykładowe rozwiązanie tego problemu za pomocą metod Math pokazane jest poniżej. Parametr number wskazuje na liczbę (wyrażenie), która ma być zwrócona, a parametr X na liczbę miejsc po przecinku:


function round(number,x) {
    var x = (!x ? 2 : x);
    return Math.round(number*Math.pow(10,x)) / Math.pow(10,x);
}

document.write( round(0.119 * 100) )
...