1. Goniometrische functies in Java

Toen we eerder afrondingsgetallen bestudeerden, maakten we kennis met de Mathklas en enkele van zijn methoden. We gaan nu dieper in op deze klasse.

Zoals de naam al aangeeft, bevat de Mathklasse methoden voor de wiskundige bewerkingen die het meest door programmeurs worden gebruikt. Dit zijn de meest interessante:

Methode Beschrijving
double sin(double d)
Retourneert de sinus van de hoek d, in radialen
double cos(double d)
Retourneert de cosinus van de hoek d, in radialen
double tan(double d)
Retourneert de tangens van de hoek d, in radialen
double asin(double d)
Retourneert de boogsinus
double acos(double d)
Retourneert de arccosinus
double atan(double d)
Geeft de boogtangens terug
double sinh(double d)
Retourneert de sinus hyperbolicus
double cosh(double d)
Geeft de hyperbolische cosinus terug
double tanh(double d)
Geeft de hyperbolische tangens terug

De methoden , en nemen een hoek uitgedrukt in radialen. Om een ​​hoek om te zetten van graden naar radialen en vice versa, biedt de klasse twee speciale methoden:Math.sin()Math.cos()Math.tan()Math

Methode Beschrijving
double toRadians(double angdeg)
Converteert een hoek van graden naar radialen
double toDegrees(double angrad)
Converteert een hoek van radialen naar graden

Trouwens, naast methoden Mathheeft de klasse ook twee constante variabelen (statische velden van de klasse):

Constante Beschrijving
double Math.PI
De constante "Pi" is gelijk aan3.141592653589793
double Math.E
De constante "E" is gelijk aan2.718281828459045

Al deze functies kunnen erg handig voor je zijn als je besluit om je eigen spellen te schrijven, met afbeeldingen te werken of gewoon de lengte van een pad op een kaart te berekenen.

Als u bijvoorbeeld wilt berekenen sin(45°), gaat u als volgt te werk:

Math.sin( Math.toRadians(45) )

Hier is een voorbeeld:

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. Algebraïsche functies in Java

In de meeste gevallen is wiskunde op de middelbare school genoeg voor een programmeur: zelfs sinussen en cosinussen komen zeer zelden voor in code. Meestal zijn ze nodig bij het werken met games, kaarten of game-engines. 90% van de programmeurs komt dit nooit tegen.

Maar naast geometrie moeten programmeurs soms algebraïsche functies gebruiken. En natuurlijk Mathbevat de klasse de meest voorkomende:

Methode Beschrijving
double sqrt(double a)
vierkantswortel vana
double cbrt(double a)
derdemachtswortel vana
double pow(double a, double b)
machtsverheffen:ab
double exp(double a)
exponentieel (het getal van Euler tot een macht verheven):ea
double log(double a)
natuurlijke logaritme van a:ln(a)
double log10(double a)
logaritme met grondtal 10 van a:log10(a)
double log1p(double x)
natuurlijke logaritme van x + 1:ln(x + 1)
double expm1(double x)
ex-1

Als u de vierkants- of derdemachtswortel van een getal wilt, staan ​​de methoden sqrt(a)en cbrt(a)tot uw dienst.

De vierkantswortel kan als volgt worden berekend:

Math.sqrt(2)

Als je een wortel van een hogere macht wilt krijgen, gebruik dan de machtsverheffende methode: atot de macht van ¼is de vierde wortel, enz.

Math.pow(2, 0.25)

Voor logaritmen en exponenten zijn er de log(a)(natuurlijke logaritme) en exp(x)(exponentiële) methoden. Om de logaritme met grondtal 10 te berekenen, hebben we log10(a).

Als u de logaritme van een getal bals grondtal wilt gebruiken a, gebruikt u deze eenvoudige formule:loga(b) = ln(b) / ln(a)

Handige methodes

Als u berekeningen uitvoert met zeer kleine waarden van x, dan kunnen de laatste twee functies — log1p()en expm1()— nuttig voor u zijn.

Wanneer u zeer kleine en zeer grote doublevariabelen toevoegt, zult u vaak merken dat zeer kleine waarden simpelweg worden genegeerd (weggegooid) als onbeduidend. Dit zal in feite gebeuren als u de methoden log()en gebruikt exp(). Om dit op te lossen, bedachten programmeurs functies die alleen het "kleine significante deel" retourneren

Voorbeeld:

Stel dat u de natuurlijke logaritme wilt berekenen van 1 + x, waar xis . U kunt dit nummer niet zomaar aan de methode doorgeven, want als u en optelt , krijgt u . is zo'n klein getal dat het volledig wordt weggegooid wanneer de getallen worden toegevoegd.10-20log()110-20110-20

Omdat wiskunde vaak betrekking heeft op het berekenen van log()getallen dicht bij 1, bedachten programmeurs een manier om dit probleem te omzeilen: in plaats van het getal zelf door te geven aan de methode, gaven ze alleen het verschil van 1.



3. Minimum en maximum

Twee andere handige functies zijn min(a, b)en max(a, b). Zoals je waarschijnlijk al geraden hebt, retourneert de eerste het minimum van twee getallen:

Math.min(a, b)

En de tweede geeft het maximum van twee getallen terug:

Math.max(a, b)

Waarom hebben we deze functies nodig als je altijd kunt schrijven ifof zelfs de ternaire operator kunt gebruiken (a < b ? a: b)?

Het draait allemaal om de leesbaarheid van de code. Soms is uw code overladen met ifstatements en wilt u een compactere notatie gebruiken. Laten we vergelijken:

Code Beschrijving
int x = 0;
if (x-5+y*20 < x*x+y*y)
   x = x-5+y*20;
else
   x = x*x+y*y;
Een statement gebruiken if-else(de langste manier om het te schrijven)
int x = x-5+y*20 < x*x+y*y ? x-5+y*20 : x*x+y*y;
De ternaire operator gebruiken Nadelen:
- omvangrijke code
- berekeningen worden twee keer uitgevoerd
int a = x-5+y*20;
int b = x*x+y*y;
int x = a < b ? a : b;
Dit is een geweldige manier om het te schrijven, maar het is een beetje overbodig
int x = Math.min(x-5+y*20, x*x+y*y);
Precies goed 🙂

4. Minimum en maximum van meerdere nummers

Er is nog een geweldige manier om de methoden min()en te gebruiken max().

Het minimum (of maximum) van verschillende getallen of variabelen berekenen. Het is erg handig om geneste aanroepen naar deze methoden te maken.

Zo vindt u het minimum van 3 getallen:

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

Dus? Het is superhandig: bereken het minimum van twee getallen en retourneer dan het minimum van dit getal en het derde getal.

Het minimum van vier getallen wordt op dezelfde manier verkregen:

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

Dat gezegd hebbende, kunnen we deze formule iets duidelijker schrijven:

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

Het werkt allemaal hetzelfde voor de max()methode.

Het gebruik van de if-elseoperator of ternaire operator zou deze codefragmenten iets omslachtiger maken. Maar het gebruik van de methoden min()en max()is gewoon perfect.