Salt la conținut

SUBIECTE NOI
« 1 / 5 »
RSS
Coada dronei de lupta Fioroasa

Taxa RAR pt motor 2.0 diesel Euro...

Radio Aftermarket Golf 5

Renault Kadjar serie motor neconf...
 Anulare Planului Urbanistic Zonal...

Flicker expunere drona noua

Corectare barem Tudor Vianu

Dji mini 4 pro si limita de inalt...
 Masinile cu volan pe dreapta - de...

Harta - apa minerala naturala

Recomandari forum Softpedia pentr...

Este TeamViewer o aplicatie cu cr...
 RCS-RDS devine Digi Romania

Problema monitor

Ce software secure folositi pentr...

Tub flexibil retur combustibil tr...
 

Calcularea radacinii patrate a unui numar

- - - - -
  • Vă rugăm să vă autentificați pentru a răspunde
5 răspunsuri în acest subiect

#1
secretalex92

secretalex92

    Active Member

  • Grup: Members
  • Mesaje: 1.496
  • Înscris: 28.12.2008
Sunt curios ce metode as putea folosii pentru a determina radacina partrata a unui numar. Folosind sqrt pentru valori mari , dar care sa intre in double, poate sa mareasca timpul de executie a programului.

#2
claus_S

claus_S

    Member

  • Grup: Members
  • Mesaje: 867
  • Înscris: 26.10.2006

 secretalex92, on 9th December 2009, 15:33, said:

Sunt curios ce metode as putea folosii pentru a determina radacina partrata a unui numar. Folosind sqrt pentru valori mari , dar care sa intre in double, poate sa mareasca timpul de executie a programului.

http://en.wikipedia....ng_square_roots

#3
ThunderSS

ThunderSS

    Active Member

  • Grup: Members
  • Mesaje: 1.102
  • Înscris: 27.09.2007

 secretalex92, on 9th December 2009, 15:33, said:

Sunt curios ce metode as putea folosii pentru a determina radacina partrata a unui numar. Folosind sqrt pentru valori mari , dar care sa intre in double, poate sa mareasca timpul de executie a programului.

Banuiesc ca ai putea incerca prin aproximare, cu, sa zicem, n zecimale cautand numarul in intervalul         [2, numar/2). Folosesti un algoritm asemanator "Divide et Impera", adica vezi cum este patratul valorii din centrul sirului fata de numar.

Ex: radical (17);

Avem sirul a=2,3,...,8;
Valoare din mijloc (in C lungimea_sirului/2) este 5.
5*5=25;
Cum 25>17 noul sir este a=2,3,4,5

Valoare din centru este 3 deci
3*3=9;
Cum 9<17 ramane a=3,4,5;

4*4=16;
Cum 16<17 avem intervalul deschis (4,5).

Deci numarul nostru va fi 4,x; Ca sa afli x poti repeta algoritmul pentru partea fractionala (vei avea a=4.1,...,4.9 pentru simpla precizie, sau a=4.01,...4.99 pentru dubla precizie etc.).

Editat de ThunderSS, 09 decembrie 2009 - 16:12.


#4
andrei_0

andrei_0

    fishy

  • Grup: Moderators
  • Mesaje: 3.990
  • Înscris: 15.02.2006

 secretalex92, on 9th December 2009, 15:33, said:

Sunt curios ce metode as putea folosii pentru a determina radacina partrata a unui numar. Folosind sqrt pentru valori mari , dar care sa intre in double, poate sa mareasca timpul de executie a programului.
Da, dar cel mai probabil ca va merge oricum mult mai repede asa decat o implementare "home made". Mai ales daca setezi compilatorul sa genereze cod SSE.

 ThunderSS, on 9th December 2009, 16:12, said:

Folosesti un algoritm asemanator "Divide et Impera", adica vezi cum este patratul valorii din centrul sirului fata de numar.
Asta cred ca e una din cele mai lente metode. Plus ca iti ocupa si o tona de memorie.

Daca e sa vorbim de metode software, probabil ca metoda folosita de John Carmack in engine-ul de Quake III e una din cele mai rapide. Singura problema e ca nu e foarte exacta, dar e suficienta pentru unele aplicatii si numerele trebuie sa fie reprezentate in standardul IEEE 754

#5
secretalex92

secretalex92

    Active Member

  • Grup: Members
  • Mesaje: 1.496
  • Înscris: 28.12.2008

 andrei_0, on 10th December 2009, 12:17, said:

Da, dar cel mai probabil ca va merge oricum mult mai repede asa decat o implementare "home made". Mai ales daca setezi compilatorul sa genereze cod SSE.
Se poate sa ai dreptate , desi pot implementa un algoritm O(1) amortizat, am ales sa folosesc limite de siruri ( este explicat in primul link) .
Ideea cu "Divide et Impera" este destul de buna dar  timpul de execuite e destul de ridicat , iar precizia este  destul de mica ( am facut cu siruri de caractere pentru o precizie mai buna :D ).
Multumesc tuturor pentru idei ! :D

Editat de secretalex92, 11 decembrie 2009 - 19:55.


#6
rAzDD

rAzDD

    Member

  • Grup: Members
  • Mesaje: 278
  • Înscris: 16.12.2008
Eu am calculat radacina patrata folosind sirul lui Newton ( An= 1/2 * (An-1 + x/An-1)).
Ruleaza in ~0.015s pt precizii de 12 zecimale (atat am testat eu).

Editat de rAzDD, 11 decembrie 2009 - 20:55.


Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

Utilizatori activi: 1

0 membri, 1 vizitatori, 0 utilizatori anonimi

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate