Stránka 1 z 1

Odmocnina v C++?

Napsal: úte 2. kvě 2006, 16:03
od kovino
Zdravim, mozete mi vysvetlit ako pracuje tento program?

#include <iostream>
#include <cmath>
int main()
{
double N = 3;
double x = N/2;
while (std::abs(x*x - N)/N > 1e-6)
x = 0.5 * ( x + N/x);
std::cout << x << " " << x*x - N << std::endl;
}

Akosi tomu nerozumiem, zacinam sa ucit v C++, tak sa nesmejte:) Ked si tam dosadim tie hodnoty premennych na papieri, tak ta funkcia za while mi vychadza -0,25, je tam abs, cize to bude +0,25 a s touto hodnotou sa potom co robi??? Potom ten vyraz x=atd. mi vychadza na papieri 1,75. Nechapem na co je tam hodnota 1e-6, preco sa porovnava s tymi 0,25 a ako sa dany program dopracuje k vysledku tej odmocniny cisla 3. Dakujem za kazdu radu.

Napsal: úte 2. kvě 2006, 17:32
od next_ghost
Rozeber si to postupně.

x*x = x^2, což by se mělo rovnat N, tzn. 3
N je odmocňovaný číslo.
Když to od sebe odečteš, mělo by vyjít 0, ale čísla s plovoucí řádovou čárkou se nedaj porovnávat jako absolutní hodnoty, takže se počítá jenom do odchylky 0.0001% ( = 10^-6 = 1e-6).

Samotnej výpočet je o řádek níž a vychází z Newtonova iteračního vzorce pro odmocninu, kterej řiká, že aritmetickej průměr dvou čísel je blíž odmocnině jejich součinu než obě čísla. Až se ukončí cyklus, v x je odmocnina N.