izmenjeno 1 put, poslednji put filmil 16.01.2005. u 12:57
Izmene poruke
- filmil16.01.2005. u 12:57zapis iz teksta poruke
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:
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:
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
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!!!
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.
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;
}
//#################################### 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;
}
#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!!!
![f_n(t)=\frac 1{\sqrt[n]{t}}](https://static.elitesecurity.org/tex/83f157444b2abd1966d10d5ec13b3f47.png)
![x=\frac 1{\sqrt[n]{a}}\quad\Leftrightarrow\quad \frac 1{x^n}-a=0](https://static.elitesecurity.org/tex/f449974b0466a0d899dbf25aa4831ebc.png)








