Az n-edik gyök kiszámítása Java-ban

1. Áttekintés

Megpróbálja megtalálni a Java n-edik gyökerét a hadifogoly() bizonyos esetekben pontatlan. Ennek oka az, hogy a dupla számok útközben elveszíthetik a pontosságot. Ezért szükség lehet az eredmény csiszolására ezen esetek kezeléséhez.

2. A probléma

Tegyük fel, hogy az N-edik gyököt a következőképpen akarjuk kiszámítani:

alap = 125, kitevő = 3

Más szavakkal, melyik szám a 3 hatványára 125?

Ezt feltéve az x szám n-edik gyöke megegyezik az x számával a hatványában 1 / n. Tehát lefordítjuk egyenletünket:

N-edik gyök = Math.pow (125, 1/3)

Az eredmény 4.999999999999999. És a 4,999999999999999 a 3 hatványára nem 125. Tehát hogyan tudjuk ezt kijavítani?

3. Az N-edik gyök helyes kiszámítása

A fenti probléma megoldása többnyire matematikai megoldás, és a lehető legegyszerűbb. Ez köztudott az x szám n-edik gyöke megegyezik az x számával a hatványában 1 / n.

A fenti egyenlet kiaknázására néhány mód van. Először használhatjuk a BigDecimal és implementáljuk a Newton-Raphson módszer változatát. Másodszor kerekíthetjük az eredményt a legközelebbi számra, és végül meghatározhatunk egy hibahatárt, ahol az eredmények elfogadhatóak lesznek. Összpontosítunk az utolsó két megközelítésre.

3.1. Kerek

Most kerekítéssel oldjuk meg a problémánkat. Használjuk újra előző példánkat, és nézzük meg, hogyan érhetjük el a megfelelő eredményt:

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

3.2. Hibahatár

Ez a megközelítés nagyon hasonló a fentiekhez. Csak meg kell határoznunk egy elfogadható hibahatárt, tegyük fel, hogy 0.00001:

public void whenBaseIs625AndNIs4_thenNthIs5 () {double nth = Math.pow (625, 1,0 / 4,0); assertEquals (5., n., 0,00001); }

A teszt bizonyítja, hogy módszereink helyesen kiszámítják az n-edik gyököt.

4. Következtetés

Fejlesztőként meg kell értenünk az adattípusokat és azok viselkedését. A fent leírt matematikai módszerek nagyon jól, nagyon jó pontossággal működnek. Kiválaszthatja azt, amelyik jobban illeszkedik a használati esethez. A fenti megoldás kódja a GitHub oldalon található.