Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: C++: Neliöjuuren laskeminen Newtonin menetelmällä

Sivun loppuun

Hipo [27.10.2002 20:25:25]

#

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;
}

Antti Laaksonen [29.10.2002 00:06:12]

#

Ovatkos neliöjuuret nyt jotenkin muodissa, vai? ;)

progo [29.10.2002 07:41:25]

#

Heh, siltä näyttää.. :)

Tulilintu [29.10.2002 10:46:26]

#

Eiks oo helppoo laskeese korottamalla luku potensiin 0.5?

Jaakko [29.10.2002 13:05:47]

#

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/23508-qb-haastaja-sqr-komennolle Enjoy.

Gevil [29.10.2002 18:10:14]

#

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..

Hipo [30.10.2002 00:00:53]

#

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ä.

tejeez [02.09.2003 17:02:17]

#

Sama QB:llä:

INPUT num#
guess# = num# / 2
FOR i% = 0 TO 9
    guess# = (num# / guess# + guess#) / 2
    PRINT i%; ":"; guess#
NEXT i%

Heikki [14.07.2006 00:26:17]

#

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

ByteMan [29.05.2007 15:31:49]

#

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...


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta