[ Edo_M @ 15.01.2005. 13:49 ] @
Ljudi ne mogu izračunati kvadratni korijen iz 2 na 40 decimalnih mjesta u c++. 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: Code: 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: Code: //#################################### 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 Code: #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] |