Mengira Akar ke-9 di Jawa

1. Gambaran keseluruhan

Mencuba mencari akar n-th di Java menggunakan pow () tidak tepat dalam beberapa kes. Sebabnya ialah nombor dua boleh kehilangan ketepatan dalam perjalanan. Oleh itu, kita mungkin perlu menggilap hasilnya untuk menangani kes-kes ini.

2. Masalahnya

Andaikan kita mahu mengira akar N-th sebagai:

base = 125, exponent = 3

Dengan kata lain, nombor yang mana dengan kekuatan 3 ialah 125?

Dengan syarat bahawa akar n-th nombor x sama dengan nombor x dalam kekuatan 1 / n . Oleh itu, kami menerjemahkan persamaan kami kepada:

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

Hasilnya ialah 4.999999999999999. Dan 4.999999999999999 ke kekuatan 3 bukan 125. Jadi bagaimana kita memperbaikinya?

3. Mengira N-th Root dengan betul

Penyelesaian untuk masalah di atas kebanyakannya adalah penyelesaian matematik, dan semudah itu. Telah diketahui bahawa punca nombor x adalah sama dengan nombor x dalam kekuatan 1 / n .

Terdapat beberapa cara untuk memanfaatkan persamaan di atas. Pertama, kita boleh menggunakan BigDecimal dan melaksanakan versi kaedah Newton-Raphson kami. Kedua, kita dapat membulatkan hasilnya ke angka terdekat dan terakhir, kita dapat menentukan margin kesalahan di mana hasilnya dapat diterima. Kami akan memberi tumpuan kepada dua pendekatan terakhir.

3.1. Bulat

Kami sekarang akan menggunakan pembundaran untuk menyelesaikan masalah kami. Mari gunakan semula contoh sebelumnya dan lihat bagaimana kita dapat memperoleh hasil yang tepat:

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

3.2. Margin Kesalahan

Pendekatan ini sangat serupa dengan di atas. Kita hanya perlu menentukan margin ralat yang boleh diterima, anggap 0.00001:

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

Ujian membuktikan bahawa kaedah kami mengira punca ke-9 dengan betul.

4. Kesimpulan

Sebagai pembangun, kita mesti memahami jenis data dan tingkah lakunya. Kaedah matematik yang dinyatakan di atas berfungsi dengan baik dengan ketepatan yang cukup baik. Anda boleh memilih yang paling sesuai dengan kes penggunaan anda. Kod untuk penyelesaian di atas boleh didapati di GitHub.