1. Trigonometrische Funktionen in Java

Als wir uns zuvor mit dem Runden von Zahlen befassten, machten wir uns mit der MathKlasse und einigen ihrer Methoden vertraut. Wir werden uns diese Klasse nun genauer ansehen.

Wie der Name schon sagt, Mathenthält die Klasse Methoden für die von Programmierern am häufigsten verwendeten mathematischen Operationen. Hier sind die interessantesten:

Methode Beschreibung
double sin(double d)
Gibt den Sinus des Winkels dim Bogenmaß zurück
double cos(double d)
Gibt den Kosinus des Winkels dim Bogenmaß zurück
double tan(double d)
Gibt den Tangens des Winkels dim Bogenmaß zurück
double asin(double d)
Gibt den Arkussinus zurück
double acos(double d)
Gibt den Arkuskosinus zurück
double atan(double d)
Gibt den Arkustangens zurück
double sinh(double d)
Gibt den hyperbolischen Sinus zurück
double cosh(double d)
Gibt den hyperbolischen Kosinus zurück
double tanh(double d)
Gibt den hyperbolischen Tangens zurück

Die Methoden , und nehmen einen Winkel an, der im Bogenmaß ausgedrückt wird. Um einen Winkel von Grad in Bogenmaß und umgekehrt umzurechnen, bietet die Klasse zwei spezielle Methoden:Math.sin()Math.cos()Math.tan()Math

Methode Beschreibung
double toRadians(double angdeg)
Konvertiert einen Winkel von Grad in Bogenmaß
double toDegrees(double angrad)
Konvertiert einen Winkel vom Bogenmaß in Grad

Neben Methoden Mathverfügt die Klasse übrigens auch über zwei konstante Variablen (statische Felder der Klasse):

Konstante Beschreibung
double Math.PI
Die Konstante „Pi“ ist gleich3.141592653589793
double Math.E
Die Konstante „E“ ist gleich2.718281828459045

Alle diese Funktionen können für Sie sehr nützlich sein, wenn Sie Ihre eigenen Spiele schreiben, mit Grafiken arbeiten oder einfach die Länge eines Pfades auf einer Karte berechnen möchten.

Wenn Sie beispielsweise berechnen möchten sin(45°), gehen Sie wie folgt vor:

Math.sin( Math.toRadians(45) )

Hier ist ein Beispiel:

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. Algebraische Funktionen in Java

In den meisten Fällen reicht einem Programmierer High-School-Mathematik aus: Sogar Sinus- und Kosinuswerte kommen im Code nur sehr selten vor. Am häufigsten werden sie bei der Arbeit mit Spielen, Karten oder Game-Engines benötigt. 90 % der Programmierer stoßen nie darauf.

Aber neben der Geometrie müssen Programmierer manchmal auch algebraische Funktionen verwenden. Und natürlich Mathenthält die Klasse die häufigsten:

Methode Beschreibung
double sqrt(double a)
Quadratwurzel vona
double cbrt(double a)
Kubikwurzel vona
double pow(double a, double b)
Potenzierung:ab
double exp(double a)
exponentiell (Eulers Zahl potenziert):ea
double log(double a)
natürlicher Logarithmus von a:ln(a)
double log10(double a)
Logarithmus zur Basis 10 von a:log10(a)
double log1p(double x)
natürlicher Logarithmus von x + 1:ln(x + 1)
double expm1(double x)
ex-1

Wenn Sie die Quadrat- oder Kubikwurzel einer Zahl ermitteln möchten, stehen Ihnen die Methoden sqrt(a)und cbrt(a)zur Verfügung.

Die Quadratwurzel kann wie folgt berechnet werden:

Math.sqrt(2)

Wenn Sie eine Wurzel einer höheren Potenz erhalten möchten, verwenden Sie die Potenzierungsmethode: ahoch ¼ist die vierte Wurzel usw.

Math.pow(2, 0.25)

Für Logarithmen und Exponenten gibt es die Methoden log(a)(natürlicher Logarithmus) und exp(x)(Exponential). Um den Logarithmus zur Basis 10 zu berechnen, haben wir log10(a).

Wenn Sie möchten, dass der Logarithmus einer Zahl bdie Basis hat a, verwenden Sie diese einfache Formel:loga(b) = ln(b) / ln(a)

Nützliche Methoden

Wenn Sie Berechnungen mit sehr kleinen Werten von durchführen x, können die letzten beiden Funktionen – log1p()und expm1()– für Sie nützlich sein.

Beim Hinzufügen sehr kleiner und sehr großer doubleVariablen werden Sie oft feststellen, dass sehr kleine Werte einfach ignoriert (verworfen) werden, da sie unbedeutend sind. Tatsächlich wird dies passieren, wenn Sie die Methoden log()und verwenden exp(). Um dieses Problem zu lösen, haben Programmierer Funktionen entwickelt, die nur den „kleinen signifikanten Teil“ zurückgeben.

Beispiel:

Angenommen , Sie möchten den natürlichen Logarithmus 1 + xvon berechnen . Sie können diese Zahl nicht einfach an die Methode übergeben, denn wenn Sie and hinzufügen , erhalten Sie . ist eine so kleine Zahl, dass sie beim Addieren der Zahlen vollständig verworfen wird.x10-20log()110-20110-20

log()Da es in der Mathematik häufig darum geht, den Wert von Zahlen nahe bei zu berechnen 1, haben Programmierer eine Möglichkeit gefunden, dieses Problem zu umgehen: Anstatt die Zahl selbst an die Methode zu übergeben, übergeben Sie nur deren Differenz von 1.



3. Minimum und Maximum

Zwei weitere nützliche Funktionen sind min(a, b)und max(a, b). Wie Sie wahrscheinlich bereits vermutet haben, gibt die erste das Minimum von zwei Zahlen zurück:

Math.min(a, b)

Und der zweite gibt das Maximum von zwei Zahlen zurück:

Math.max(a, b)

Warum brauchen wir diese Funktionen, wenn Sie ifden ternären Operator immer schreiben oder sogar verwenden können (a < b ? a: b)?

Es geht um die Lesbarkeit des Codes. Manchmal ist Ihr Code mit Anweisungen überladen ifund Sie möchten eine kompaktere Notation verwenden. Lass uns vergleichen:

Code Beschreibung
int x = 0;
if (x-5+y*20 < x*x+y*y)
   x = x-5+y*20;
else
   x = x*x+y*y;
Eine Anweisung verwenden if-else(der längste Weg, sie zu schreiben)
int x = x-5+y*20 < x*x+y*y ? x-5+y*20 : x*x+y*y;
Verwendung des ternären Operators Nachteile:
– umfangreicher Code
– Berechnungen werden zweimal durchgeführt
int a = x-5+y*20;
int b = x*x+y*y;
int x = a < b ? a : b;
Das ist eine tolle Art, es zu schreiben, aber es ist ein wenig überflüssig
int x = Math.min(x-5+y*20, x*x+y*y);
Genau richtig 🙂

4. Minimum und Maximum mehrerer Zahlen

Es gibt noch eine weitere großartige Möglichkeit, die min()und max()-Methoden zu verwenden.

Zur Berechnung des Minimums (oder Maximums) mehrerer Zahlen oder Variablen. Es ist sehr praktisch, diese Methoden verschachtelt aufzurufen.

So finden Sie das Minimum von 3 Zahlen:

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

Na und? Es ist super praktisch: Berechnen Sie das Minimum von zwei Zahlen und geben Sie dann das Minimum dieser Zahl und der dritten Zahl zurück.

Das Minimum von vier Zahlen erhält man auf die gleiche Weise:

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

Allerdings können wir diese Formel etwas klarer formulieren:

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

Für die Methode funktioniert alles gleich max().

Die Verwendung des if-elseOperators oder ternären Operators würde diese Codefragmente etwas umständlicher machen. Aber die Verwendung der min()und- max()Methoden ist einfach perfekt.