1. Fonctions trigonométriques en Java
Lorsque nous avons étudié les nombres arrondis plus tôt, nous nous sommes familiarisés avec la Math
classe et certaines de ses méthodes. Nous allons maintenant détailler cette classe.
Comme son nom l'indique, la Math
classe contient des méthodes pour les opérations mathématiques les plus fréquemment utilisées par les programmeurs. Voici les plus intéressants :
Méthode | Description | |
---|---|---|
|
Renvoie le sinus de l'angle d , en radians |
|
|
Renvoie le cosinus de l'angle d , en radians |
|
|
Renvoie la tangente de l'angle d , en radians |
|
|
Renvoie l'arc sinus | |
|
Renvoie l'arc cosinus | |
|
Renvoie l'arc tangente | |
|
Renvoie le sinus hyperbolique | |
|
Renvoie le cosinus hyperbolique | |
|
Renvoie la tangente hyperbolique |
Les méthodes , et prennent un angle exprimé en radians. Pour convertir un angle de degrés en radians et vice versa, la classe propose deux méthodes spéciales :Math.sin()
Math.cos()
Math.tan()
Math
Méthode | Description |
---|---|
|
Convertit un angle de degrés en radians |
|
Convertit un angle de radians en degrés |
Soit dit en passant, en plus des méthodes, la Math
classe a également deux variables constantes (champs statiques de la classe) :
Constant | Description |
---|---|
|
La constante "Pi" est égale à3.141592653589793 |
|
La constante "E" est égale à2.718281828459045 |
Toutes ces fonctions peuvent vous être très utiles si vous décidez d'écrire vos propres jeux, de travailler avec des graphismes ou simplement de calculer la longueur d'un chemin sur une carte.
Par exemple, si vous souhaitez calculer sin(45°)
, voici comment procéder :
Math.sin( Math.toRadians(45) )
Voici un exemple :
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. Fonctions algébriques en Java
Dans la plupart des cas, les mathématiques du secondaire suffisent à un programmeur : même les sinus et les cosinus sont très rarement trouvés dans le code. Le plus souvent, ils sont nécessaires lorsque vous travaillez avec des jeux, des cartes ou des moteurs de jeu. 90% des programmeurs ne rencontrent jamais cela.
Mais en plus de la géométrie, les programmeurs doivent parfois utiliser des fonctions algébriques. Et, bien sûr, la Math
classe contient les plus courantes :
Méthode | Description |
---|---|
|
racine carrée dea |
|
racine cubique dea |
|
exponentiation :ab |
|
exponentielle (nombre d'Euler élevé à une puissance) :ea |
|
logarithme naturel de a :ln(a) |
|
logarithme en base 10 de a :log10(a) |
|
logarithme naturel de x + 1 :ln(x + 1) |
|
ex-1 |
Si vous voulez la racine carrée ou cubique d'un nombre, les méthodes sqrt(a)
et cbrt(a)
sont à votre service.
La racine carrée peut être calculée comme suit :
Math.sqrt(2)
Si vous voulez obtenir une racine d'une puissance supérieure, utilisez la méthode d'exponentiation : a
à la puissance ¼
est la quatrième racine, etc.
Math.pow(2, 0.25)
Pour les logarithmes et les exposants, il existe les méthodes log(a)
(logarithme naturel) et exp(x)
(exponentielle). Pour calculer le logarithme en base 10, nous avons log10(a)
.
Si vous voulez que le logarithme d'un nombre b
soit basé sur a
, utilisez cette formule simple :loga(b) = ln(b) / ln(a)
Méthodes utiles
Si vous effectuez des calculs impliquant de très petites valeurs de x
, les deux dernières fonctions — log1p()
et expm1()
— peuvent vous être utiles.
Lorsque vous ajoutez des variables très petites et très grandes double
, vous constaterez souvent que les très petites valeurs sont simplement ignorées (rejetées) car insignifiantes. En fait, cela se produira si vous utilisez les méthodes log()
et exp()
. Pour résoudre ce problème, les programmeurs ont proposé des fonctions qui ne renvoient que la "petite partie significative"
Exemple:
Supposons que vous vouliez calculer le logarithme népérien de 1 + x
, où x
est . Vous ne pouvez pas simplement passer ce nombre à la méthode, car si vous ajoutez et , vous obtenez . est un si petit nombre qu'il sera complètement ignoré lorsque les nombres seront additionnés.10-20
log()
1
10-20
1
10-20
Étant donné que les mathématiques impliquent souvent le calcul de log()
nombres proches de 1
, les programmeurs ont trouvé un moyen de contourner ce problème : au lieu de transmettre le nombre lui-même à la méthode, ne transmettez que sa différence par rapport à 1
.
3. Minimum et maximum
Deux autres fonctions utiles sont min(a, b)
et max(a, b)
. Comme vous l'avez probablement déjà deviné, le premier renvoie le minimum de deux nombres :
Math.min(a, b)
Et le second renvoie le maximum de deux nombres :
Math.max(a, b)
Pourquoi avons-nous besoin de ces fonctions quand on peut toujours écrire if
ou même utiliser l'opérateur ternaire (a < b ? a: b)
?
Tout dépend de la lisibilité du code. Parfois, votre code est surchargé d' if
instructions et vous souhaitez utiliser une notation plus compacte. Comparons:
Code | Description |
---|---|
|
Utiliser une if-else instruction (la manière la plus longue de l'écrire) |
|
Utilisation de l'opérateur ternaire Inconvénients : - code volumineux - les calculs sont effectués deux fois |
|
C'est une excellente façon de l'écrire, mais c'est un peu redondant |
|
Juste ce qu'il faut 🙂 |
4. Minimum et maximum de plusieurs nombres
Il existe une autre excellente façon d'utiliser les méthodes min()
et max()
.
Calculer le minimum (ou le maximum) de plusieurs nombres ou variables. Il est très pratique de faire des appels imbriqués à ces méthodes.
Voici comment trouver le minimum de 3 numéros :
Math.min(a, Math.min(b, c))
Et alors? C'est super pratique : calculez le minimum de deux nombres, puis retournez le minimum de ce nombre et du troisième nombre.
Le minimum de quatre nombres s'obtient de la même manière :
Math.min(a, Math.min(b, Math.min(с, d)))
Cela dit, on peut écrire cette formule un peu plus clairement :
Math.min(Math.min(a, b), Math.min(c, d))
Tout fonctionne de la même manière pour la max()
méthode.
L'utilisation de l' if-else
opérateur ou de l'opérateur ternaire rendrait ces extraits de code un peu plus encombrants. Mais utiliser les méthodes min()
et max()
est tout simplement parfait.
GO TO FULL VERSION