Pokušao sam sa algoritmom za ručno računanje al ne znam kako
da ga implementiram u c++.Naime potrebno mi je da nekako brojeve
predstavim veće od double. Evo kako je to izvedeno algoritmom:
1.Izaberi grubu približnu vrijednost B od sqrt(A).
B je predpostavljena neka gruba vrednost korena
A je broj iz kojeg se traži kvadratni koren
2.Podeli A sa G pa saberi to sa G i to sve podeli sa 2, tj:
C = ((A/G)+G)/2
3.Ukoliko je C dovoljno prezican, stani. Inače , ako B = C vrati se
na korak 2.
Evo kako bi to bilo za kvadratni koren iz 2.
Da izračunamo (2), izaberimo da je B = 1.5.
C = (2/1.5 + 1.5)/2 = 1.41666666666
C = (2/1.41666666666+1.41666666666)/2=1.41421568628
C = (2/1.41421568628+1.41421568628)/2=1.41421356238
C = (2/1.41421356238+1.41421356238)/2=1.41421356238
U c++ to bi izgledalo ovako:
//#################################### INCLUDES ###############################
#ifndef iostream.h
#include <iostream.h>
#endif
//ifndef string.h
//#include <string.h>
//#endif
//#ifndef conio.h
//#include <conio.h>
//#endif
//#ifndef ctype.h
//#include <ctype.h>
//#endif
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//##################### PROTOTYPES ###################################
double findSqrt ( double number , double approximation , int placesOfAccuracy );
//##########################################################
//*************************************** Main *****************************************
void main()
{
cout << "Enter the number of which to take a root : ";
double number;
cin >> number;
cout << endl << "Enter your estimate : " ;
double estimate;
cin >> estimate;
cout << "Enter the digits of accuracy required : ";
int accuracy;
cin >> accuracy;
double result = findSqrt ( number , estimate , accuracy );
cout << "The result is : " << result;
cout << endl << "goodbye.............." << endl;
}
/*******************************************************************************
Function Name: findSqrt
Parameters:
Description:
Returns:
Comments:
*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*/
double findSqrt ( double number , double approximation , int placesOfAccuracy )
{
placesOfAccuracy /= 2;
while ( placesOfAccuracy > 0 )
{
approximation = ( ( number / approximation ) + approximation ) / 2 ;
placesOfAccuracy --;
}
return approximation;
}
No meni treba na 40 decimala.
Na webu sam pronasao približno resenje al sa još nekim funkcijama koje bi trebalo
izbrisati a i program je totalno kompliciran. Nalazi se na:
http://www.people.memphis.edu/~wjermann/download.htm
Potrebna su ova tri filea:
number.h
number.cpp
numtest.cpp
Kad bi mogao to sve obrisat i staviti u jedan file ili slično jer siguran sam da veliki dio nije potreban. Ja sam skratio nummtest.cpp i izgleda ovako
#include "number.cpp"
main()
{ Number y;
_DP = 40;
cout << "sqrt(2) is:\n\n";
y = sqrt("2"); y.Numpnt();
return 0;
}
ali problem je što ne znam koko je do toga došlo.
AKO NEKO MOŽE DA MI POMOGNE BIO BI VEOMA ZAHVALAN.
UNAPRED HVALA!!!
[Ovu poruku je menjao filmil dana 16.01.2005. u 12:57 GMT+1]