1. Trigonometrikus függvények Java nyelven

Amikor korábban a számok kerekítését tanultuk, megismerkedtünk az osztállyal Mathés néhány módszerével. Most részletesebben megvizsgáljuk ezt az osztályt.

Ahogy a neve is sugallja, az Mathosztály a programozók által leggyakrabban használt matematikai műveletekre vonatkozó metódusokat tartalmaz. Íme a legérdekesebbek:

Módszer Leírás
double sin(double d)
A szög szinuszát adja vissza dradiánban
double cos(double d)
A szög koszinuszát adja vissza dradiánban
double tan(double d)
A szög tangensét adja vissza dradiánban
double asin(double d)
Az arcszinust adja vissza
double acos(double d)
Az arckoszint adja vissza
double atan(double d)
Az arctangensét adja vissza
double sinh(double d)
Visszaadja a hiperbolikus szinust
double cosh(double d)
A hiperbolikus koszinuszát adja vissza
double tanh(double d)
A hiperbolikus érintőt adja vissza

A , és módszerek radiánban kifejezett szöget vesznek fel. A szög fokról radiánra és fordítva történő konvertálására az osztály két speciális módszert kínál:Math.sin()Math.cos()Math.tan()Math

Módszer Leírás
double toRadians(double angdeg)
Szöget alakít át fokokból radiánokká
double toDegrees(double angrad)
Egy szöget radiánból fokokká alakít át

Egyébként a metódusokon kívül az osztálynak két állandó változójaMath is van (az osztály statikus mezői):

Állandó Leírás
double Math.PI
A "Pi" állandó egyenlő3.141592653589793
double Math.E
Az "E" állandó egyenlő2.718281828459045

Mindezek a funkciók nagyon hasznosak lehetnek az Ön számára, ha úgy dönt, hogy saját játékokat ír, grafikával dolgozik, vagy egyszerűen kiszámítja az útvonal hosszát a térképen.

Például, ha ki szeretné számolni sin(45°), a következőképpen teheti meg:

Math.sin( Math.toRadians(45) )

Íme egy példa:

public class Main
{
   public static int N = 10;

   public static void drawValue(double y)
   {
     int value = (int) (y * N) + N;
     for (int i = 0; i < 2 * N; i++)
     {
       char c = i == N ? '|': '.';
       if (i == value)
         c = '*';
       System.out.print(c);
     }
     System.out.println();
   }

   public static void main(String[] args)
   {
     for (int i = 0; i < 10 * N; i++)
     {
       double x = i * 1.0 / N;
       double y = Math.sin(x);
       drawValue(y);
     }
   }
}


2. Algebrai függvények Java nyelven

A legtöbb esetben a középiskolai matematika elég egy programozónak: még szinuszokat és koszinuszokat is nagyon ritkán találunk a kódban. Leggyakrabban játékokkal, térképekkel vagy játékmotorokkal való munka során van rájuk szükség. A programozók 90%-a soha nem találkozik ezzel.

De a geometria mellett a programozóknak néha algebrai függvényeket is kell használniuk. És természetesen az Mathosztály tartalmazza a leggyakoribbakat:

Módszer Leírás
double sqrt(double a)
négyzetgyökea
double cbrt(double a)
köbgyökea
double pow(double a, double b)
hatványozás:ab
double exp(double a)
exponenciális (Euler-szám hatványra emelve):ea
double log(double a)
természetes logaritmusa a:ln(a)
double log10(double a)
10-es bázis logaritmusa a:log10(a)
double log1p(double x)
természetes logaritmusa x + 1:ln(x + 1)
double expm1(double x)
ex-1

Ha szeretné egy szám négyzet- vagy kockagyökét, a sqrt(a)és cbrt(a)metódusok az Ön szolgálatában állnak.

A négyzetgyök a következőképpen számítható ki:

Math.sqrt(2)

Ha egy magasabb hatvány gyökerét akarjuk megszerezni, akkor használjuk a hatványozási módszert: aa hatványhoz ¼a negyedik gyök, stb.

Math.pow(2, 0.25)

A logaritmusokhoz és kitevőkhöz létezik a log(a)(természetes logaritmus) és exp(x)az (exponenciális) módszer. A 10-es alapú logaritmus kiszámításához log10(a).

Ha azt szeretné, hogy egy szám logaritmusa bbázis legyen a, használja ezt az egyszerű képletet:loga(b) = ln(b) / ln(a)

Hasznos módszerek

Ha olyan számításokat végez, amelyek nagyon kis értékeit tartalmazzák x, akkor az utolsó két függvény – log1p()és expm1()– hasznos lehet az Ön számára.

Ha nagyon kicsi és nagyon nagy doubleváltozókat ad hozzá, gyakran azt tapasztalhatja, hogy a nagyon kis értékeket a rendszer egyszerűen figyelmen kívül hagyja (elveti), mint jelentéktelent. log()Valójában ez akkor fog megtörténni, ha a és exp()módszereket használja . Ennek megoldására a programozók olyan függvényeket találtak ki, amelyek csak a "kis jelentős részt" adják vissza.

Példa:

Tegyük fel, hogy ki akarja számítani a természetes logaritmusát 1 + x, ahol xvan . Ezt a számot nem lehet egyszerűen átadni a metódusnak, mivel ha hozzáadja a és -t , akkor a -t kapja . olyan kis szám, hogy a számok összeadásakor teljesen eldobjuk.10-20log()110-20110-20

log()Mivel a matematika gyakran magában foglalja a -hoz közeli számok kiszámítását 1, a programozók kitaláltak egy módszert a probléma megkerülésére: ahelyett, hogy magát a számot adnák át a metódusnak, csak a -tól való eltérését adják át 1.



3. Minimum és maximum

Két további hasznos funkció a min(a, b)és max(a, b). Amint valószínűleg már sejtette, az első a minimum két számot adja vissza:

Math.min(a, b)

A második pedig a maximum két számot adja vissza:

Math.max(a, b)

Miért van szükségünk ezekre a függvényekre, ha mindig írhatsz ifvagy akár használhatod is a háromtagú operátort (a < b ? a: b)?

Minden a kód olvashatóságán múlik. Néha a kód túlterhelt utasításokkal if, és tömörebb jelölést szeretne használni. Hasonlítsuk össze:

Kód Leírás
int x = 0;
if (x-5+y*20 < x*x+y*y)
   x = x-5+y*20;
else
   x = x*x+y*y;
Állítás használata if-else(az írás leghosszabb módja)
int x = x-5+y*20 < x*x+y*y ? x-5+y*20 : x*x+y*y;
A háromtagú operátor használata Hátrányok:
- terjedelmes kód
- a számításokat kétszer hajtják végre
int a = x-5+y*20;
int b = x*x+y*y;
int x = a < b ? a : b;
Ez egy nagyszerű módja annak, hogy megírja, de ez egy kicsit felesleges
int x = Math.min(x-5+y*20, x*x+y*y);
Pont jó 🙂

4. Több szám minimuma és maximuma

min()Van egy másik nagyszerű módja a és módszerek használatának max().

Több szám vagy változó minimumának (vagy maximumának) kiszámításához. Nagyon kényelmes ezeknek a metódusoknak a beágyazott hívása.

Így találhatja meg a minimum 3 számot:

Math.min(a, Math.min(b, c))

És akkor mi van? Nagyon kényelmes: számítsa ki két szám minimumát, majd adja vissza ennek a számnak a minimumát és a harmadik számot.

A legalább négy számot a következő módon kapjuk meg:

Math.min(a, Math.min(b, Math.min(с, d)))

Ennek ellenére egy kicsit érthetőbben leírhatjuk ezt a képletet:

Math.min(Math.min(a, b), Math.min(c, d))

Minden ugyanúgy működik a max()módszerrel.

if-elseAz operátor vagy háromtagú operátor használata kissé körülményesebbé tenné ezeket a kódrészleteket. De a min()és max()módszerek használata egyszerűen tökéletes.