Calcul de la nième racine en Java

1. Vue d'ensemble

Essayer de trouver la n-ième racine en Java à l'aide de pow () est inexact dans certains cas. La raison en est que les nombres doubles peuvent perdre en précision en cours de route. Par conséquent, nous pouvons avoir besoin de peaufiner le résultat pour gérer ces cas.

2. Le problème

Supposons que nous voulions calculer la N-ième racine comme suit:

base = 125, exponent = 3

En d'autres termes, quel nombre à la puissance 3 est 125?

Il est prévu que la racine n-ième d'un nombre x soit égale au nombre x à la puissance 1 / n . Nous traduisons donc notre équation en:

N-th root = Math.pow(125, 1/3)

Le résultat est 4,999999999999999. Et 4,999999999999999 à la puissance 3 n'est pas 125. Alors, comment pouvons-nous résoudre ce problème?

3. Calculer correctement la N-ième racine

La solution au problème ci-dessus est principalement une solution de contournement mathématique, et elle est aussi simple que possible. Il est bien connu que la racine n-ième d'un nombre x est égale au nombre x en puissance de 1 / n .

Il existe plusieurs façons d'exploiter l'équation ci-dessus. Tout d'abord, nous pouvons utiliser un BigDecimal et implémenter notre version de la méthode Newton-Raphson. Deuxièmement, nous pouvons arrondir le résultat au nombre le plus proche et enfin, nous pouvons définir une marge d'erreur où les résultats seront acceptables. Nous allons nous concentrer sur les deux dernières approches.

3.1. Rond

Nous allons maintenant utiliser l'arrondi pour résoudre notre problème. Réutilisons notre exemple précédent et voyons comment nous pouvons obtenir le bon résultat:

public void whenBaseIs125AndNIs3_thenNthIs5() { double nth = Math.round(Math.pow(125, 1.0 / 3.0)); assertEquals(5, nth, 0); }

3.2. Marge d'erreur

Cette approche est très similaire à celle ci-dessus. Nous avons juste besoin de définir une marge d'erreur acceptable, supposons 0,00001:

public void whenBaseIs625AndNIs4_thenNthIs5() { double nth = Math.pow(625, 1.0 / 4.0); assertEquals(5, nth, 0.00001); }

Le test prouve que nos méthodes calculent correctement la nième racine.

4. Conclusion

En tant que développeurs, nous devons comprendre les types de données et leur comportement. Les méthodes mathématiques décrites ci-dessus fonctionnent très bien avec une assez bonne précision. Vous pouvez choisir celui qui correspond le mieux à votre cas d'utilisation. Le code de la solution ci-dessus se trouve à l'adresse over sur GitHub.