Newton-sedän menetelmä, hyvin yksinkertanen ja tehokas tapa saada neliöjuuri.
#include <iostream> #include <stdlib.h> using namespace std; int main(int argc, char *argv[]) { double num = 2.0; if(argc >= 2) num = strtod(argv[1], 0); cout.precision(20); double guess = num / 2; for (int i=0; i<10; i++) { guess = (num / guess + guess) / 2; cout << i << ": " << guess << endl; } return 0; }
Ovatkos neliöjuuret nyt jotenkin muodissa, vai? ;)
Heh, siltä näyttää.. :)
Eiks oo helppoo laskeese korottamalla luku potensiin 0.5?
Näyttää vähä samalta tekniikalta ku mun tekemässä. En tiedä kuka setä sen on keksiny, mut toimii ainaki. https://www.ohjelmointiputka.net/koodivinkit/
Yleistettävyyteen panostettava. Järkevää olisi tehdä moduuli joka laskee n-juuren eikä pelkästään neliöjuuren.. n kysytään käyttäjältä ja siitä sitten ohjelma jatkaa..
Vois ollakkin helppoa laskea korottamal puoleen, ite ei vaan osaa laskea muita kuin kokonaislukujen potensseja. Kerro toki jos ite tiedät jonkun menetelmän. :) Sillähän sais sitten n-juurenki, kun korottaa vaan 1/n.
Aina ei kannata yleistää. Esim. neliöjuuren laskemista n-juuren laskemiseks, kun neliöjuuri on paljon nopeampi. Ja c++:ssa ei ole moduuleja, vai mitä tarkotat?
Jotain Windows-ajattelua, että jotain kysytään käyttäjältä. :) Unixissa kun koodaa niin on kivempi kun ohjelmissa luvut ja muut annetaan argumenttina (tai suoraan stdiniin, ei kysymystä) ja tulostuksena vain luku. Ohjelmaa voi siten käyttää suoraan skripteissä.
Sama QB:llä:
INPUT num# guess# = num# / 2 FOR i% = 0 TO 9 guess# = (num# / guess# + guess#) / 2 PRINT i%; ":"; guess# NEXT i%
Ei muuten taida olla Newtonin keksimä menetelmä tuo iterointi, vaan sitä käyttivät jo muinaiset babylonialaiset, katsokaa vaikka http://fi.wikipedia.org/wiki/Neliöjuuri
no just noin :)
omasta mielestäni otsikkotiedosto cmath olis yksinkertaisempi tai sit se n*0.5
en vaan kuollaksenikaan keksi miten koodi
if(argc >= 2) num = strtod(argv[1], 0); cout.precision(20);
toimii, mut enpä ookkaa toisaalta mikää ammattilainen :/
koodannu vasta vähän aikaa...
Aihe on jo aika vanha, joten et voi enää vastata siihen.