Salah satu masalah dengan metode Newton adalah bahwa ia membutuhkan operasi divisi di setiap iterasi, yang merupakan operasi integer dasar paling lambat.
Metode Newton untuk akar kuadrat resiprokal tidak. Jika adalah angka yang ingin Anda temukan 1x , iterate:1x√
ri+1=12ri(3−xr2i)
Ini sering dinyatakan sebagai:
d i = 1 - w i x r i + 1 = r i + r i d i
wi=r2i
di=1−wix
ri+1=ri+ridi2
Itu tiga operasi multiplikasi. Pembagian dengan dua dapat diimplementasikan sebagai shift-right.
Sekarang masalahnya adalah bahwa bukan bilangan bulat. Namun, Anda dapat memanipulasinya dengan menerapkan floating-point secara manual, dan melakukan banyak operasi shift untuk mengkompensasi bila perlu.r
Pertama, mari kita skala ulang :x
x′=2−2ex
di mana kita ingin lebih besar dari, tetapi mendekati, 1 . Jika kita menjalankan algoritma di atas pada x ′ bukannya x , kita menemukan r = 1x′1x′x. Lalu,√r=1x√′.x−−√=2erx′
Sekarang mari kita bagi menjadi mantissa dan eksponen:r
ri=2−eir′i
di mana adalah bilangan bulat. Secara intuitif, e i mewakili ketepatan jawaban.r′iei
Kita tahu bahwa metode Newton secara kasar menggandakan jumlah digit signifikan yang akurat. Jadi kita dapat memilih:
ei+1=2ei
Dengan sedikit manipulasi, kami menemukan:
w i = r ′ i 2 x ′ i = x
ei+1=2ei
wi=r′i2
di=2ei+1-w ′ i x ′ ix′i=x22e−ei+1
r ′ i + 1 =2eir ′ i -r ′ i didi=2ei+1−w′ix′i2ei+1
r′i+1=2eir′i−r′idi2ei+1
Di setiap iterasi:
x−−√≈r′ix2e+ei
Sebagai contoh, mari kita coba menghitung akar kuadrat dari . Kami kebetulan tahu bahwa jawabannya adalah 2 31 √x=263 . Akar kuadrat resiprokal adalah 12312–√, jadi kita akan menetapkane=31(ini adalah skala masalah) dan untuk tebakan awal kita akan memilihr′0=3dane0=2. (Yaitu, kami memilih312√2−31e=31r′0=3e0=2 untuk estimasi awal kami ke134 )12√
Kemudian:
e2=8,r ′ 2 =180e3=16,r ′ 3 =46338e4=32,r ′ 4 =3037000481
e1=4,r′1=11
e2=8,r′2=180
e3=16,r′3=46338
e4=32,r′4=3037000481
Kita bisa mengetahui kapan harus berhenti iterasi dengan membandingkan ke e ; jika saya telah menghitung dengan benar, e i > 2 e harus cukup baik. Kami akan berhenti di sini, dan menemukan:eieei>2e
263−−−√≈3037000481×263231+32=3037000481
3037000499ei
Untuk menganalisis kompleksitas metode ini, perhatikan bahwa mengalikan dua bO(blogb)r′i<2eiwieiei+1ei+12ei+1nomor-bit.
O(eilogei)O(loge)O(2elog2e)O(elog2e)x
Namun, analisis ini menyembunyikan prinsip penting yang harus diingat oleh semua orang yang bekerja dengan bilangan bulat besar: karena perkalian adalah superlinear dalam jumlah bit, setiap operasi penggandaan hanya boleh dilakukan pada bilangan bulat yang kira-kira besarnya presisi saat ini (dan , Saya dapat menambahkan, Anda harus mencoba untuk mengalikan angka-angka yang memiliki urutan yang sama besarnya). Menggunakan bilangan bulat lebih besar dari itu adalah usaha yang sia-sia. Faktor konstan penting, dan untuk bilangan bulat besar, mereka penting.
ab2cabc