Maths:Racine Nième [Résolu]

Taur33 85 Messages postés vendredi 24 septembre 2010Date d'inscription 20 mai 2011 Dernière intervention - 11 déc. 2010 à 17:41 - Dernière réponse : BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention
- 12 déc. 2010 à 10:56
Bonjour à tous
Il existe sur le lien ci-dessous une méthode intéressante pour extraire la racine
nième d'un nombre entier ou décimal (en effet elle n'utilise que l'addition et
la soustraction)
Voici le lien:
http://fr.wikibooks.org/wiki/Calcul_%C3%A9crit/Calcul_de_la_racine_n-i%C3%A8me_d%27un_nombre
Cependant en essayant par exemple Racine cubique de 122 la methode échoue:

R1 R2 T
1 1 122-1=121
2 3
3
4 7 121-7=114
5 12
6
7 19 114-19
8 27
9
10 37 95-37=58
11 48
12
13 61 58-61=-3 et c'est ici que je ne comprends pas la méthode.

Je solliciterais donc votre aide pour comprendre et savoir si cette méthode est
sure
Merci d'avance
Afficher la suite 

Votre réponse

5 réponses

CGSI3 417 Messages postés vendredi 22 février 2008Date d'inscription 7 janvier 2018 Dernière intervention - 11 déc. 2010 à 19:38
0
Merci
Bonsoir Taur33,
Je n'ai pas de réponse mais des liens:

http://f-cpu.seul.org/new/manuel_arith.pdf

c'est assez théorique et compliqué mais si tu cherche une méthode sans division elle est peut être sur ce tuto.(methode CMOS ... proche de celle de ton PC)

Mais il existe d'autres méthodes:
http://membres.multimania.fr/ericmer/Racines/racines.htm

Sinon bonne prog CGSI3
Commenter la réponse de CGSI3
CGSI3 417 Messages postés vendredi 22 février 2008Date d'inscription 7 janvier 2018 Dernière intervention - 11 déc. 2010 à 19:55
0
Merci
BigInteger: Entier signé très grand (sans limite supérieure ou inférieure) (VB2010)

Je crois que tu as un pb de limite de calcul et j'ai cette idée.
Sinon Bonne prog CGSI3
Commenter la réponse de CGSI3
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 11 déc. 2010 à 22:57
0
Merci
Tout ceci est de l'ordre de la masturbation matheuse, ce qui est une pure nuisance en informatique.
Exemple:
"Si cela ne suffit toujours pas à rendre R(N - 1) supérieur à T, on supprime la ligne du +101, on remultiplie de nouveau les R(N) par pow(10, N), etc..."

Si c'est pour faire des puissances à répétition, je n'en fais qu'une et 1 SEULE:
R = pow(N, 1/degre);

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Taur33 85 Messages postés vendredi 24 septembre 2010Date d'inscription 20 mai 2011 Dernière intervention - 12 déc. 2010 à 06:21
0
Merci
Merci de votre aide CGSI3 ET BRUNEWS

Je n'ai pas de réponse mais des liens:

http://f-cpu.seul.org/new/manuel_arith.pdf

Mais il existe d'autres méthodes:
http://membres.multimania.fr/ericmer/Racines/racines.htm


le premier est en effet interessant quand au second il utilise des divisions ou
alors ce n'est que pour la racine carrée.

BigInteger: Entier signé très grand (sans limite supérieure ou inférieure) (VB2010)

Je crois que tu as un pb de limite de calcul et j'ai cette idée.


La méthode fonctionne avec des tranches de Racine nième donc n (le nombre de chiffres max par tranche) ne dépasse pas un Integer(sauf si on cherche Racine 3 000 000 000 de 157894 par exemple)

Tout ceci est de l'ordre de la masturbation matheuse, ce qui est une pure nuisance en informatique.

Si c'est pour faire des puissances à répétition, je n'en fais qu'une et 1 SEULE:
R = pow(N, 1/degre);


Peut etre mais dans ce cas pourquoi trouve-t-on une méthode de calcul validée par Wikipédia qui pourrait ne pas etre valide ?
Certes racine nième de x revient à faire x^1/n comme tu le dis BruNews mais là faut
gérer une division ou créer une fonction pow(x,n) qui puisse gérer des nombres de + de 100 chiffres et des exposants décimaux.(si tu as un bout de code je suis preneur,j'ai un algo rapide mais avec x et n entiers)

Cordialement.
Commenter la réponse de Taur33
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 12 déc. 2010 à 10:56
-2
Merci
Les traitements lourds de type pow() et/ou nombre de taille indéterminée ne se font qu'en langage compilé (C et ASM).

Exemple d'une fonction pow() qui prend float32 en base et exponentielle en mode x64.
Cette pow() est très rapide mais APPROCHEE à quelques millièmes prés.
Pour du float64 ce sera nettement plus compliqué, si taille indéterminée alors...

bnPowF PROC ; XMM0 float fVal, XMM1 float fexp
lea rdx, [rsp - 24]
xorps xmm5, xmm5
movd xmm2, dword ptr BNPACKinv_mant_mask
movaps [rdx], xmm7
cmpss xmm5, xmm0, 1
maxss xmm0, dword ptr BNPACKmin_norm_pos
movd xmm7, dword ptr BNPACK1PZ
movaps xmm3, xmm0
movaps [rdx - 16], xmm6
andps xmm0, xmm2
orps xmm0, xmm7
movd eax, xmm5
movaps xmm4, xmm0
movd xmm2, dword ptr BNPACKDW7F
subss xmm0, xmm7
addss xmm4, xmm7
psrld xmm3, 23
rcpss xmm4, xmm4
mulss xmm0, xmm4
psubd xmm3, xmm2
addss xmm0, xmm0
movaps xmm2, xmm0
mulss xmm0, xmm0
movd xmm4, dword ptr BNPACKlog_p0
movd xmm6, dword ptr BNPACKlog_q0
mulss xmm4, xmm0
movss xmm5, dword ptr BNPACKlog_p1
mulss xmm6, xmm0
movd xmm7, dword ptr BNPACKlog_q1
addss xmm4, xmm5
addss xmm6, xmm7
movd xmm5, dword ptr BNPACKlog_p2
mulss xmm4, xmm0
movd xmm7, dword ptr BNPACKlog_q2
mulss xmm6, xmm0
addss xmm4, xmm5
movd xmm5, dword ptr BNPACKlog2_c0
addss xmm6, xmm7
cvtdq2ps xmm7, xmm3
mulss xmm0, xmm4
rcpss xmm6, xmm6
mulss xmm0, xmm6
movd xmm4, dword ptr BNPACKexp2_hi
mulss xmm0, xmm2
movd xmm6, dword ptr BNPACKexp2_lo
mulss xmm2, xmm5
mulss xmm0, xmm5
addss xmm2, xmm7
movd xmm3, dword ptr BNPACKZP5
addss xmm0, xmm2
xorps xmm2, xmm2
movd xmm5, dword ptr BNPACKDW1
mulss xmm0, xmm1
minss xmm0, xmm4
movd xmm4, dword ptr BNPACKexp2_p0
maxss xmm0, xmm6
movd xmm6, dword ptr BNPACKexp2_q0
addss xmm3, xmm0
cmpnltss xmm2, xmm3
pand xmm2, xmm5
cvttps2dq xmm3, xmm3
psubd xmm3, xmm2
cvtdq2ps xmm2, xmm3
subss xmm0, xmm2
movaps xmm2, xmm0
mulss xmm0, xmm0
paddd xmm3, BNPACKDW7F
mulss xmm4, xmm0
mulss xmm6, xmm0
addss xmm4, dword ptr BNPACKexp2_p1
addss xmm6, dword ptr BNPACKexp2_q1
mulss xmm4, xmm0
addss xmm4, dword ptr BNPACKexp2_p2
mulss xmm2, xmm4
movd xmm0, dword ptr BNPACK1PZ
subss xmm6, xmm2
pslld xmm3, 23
rcpss xmm6, xmm6
movd xmm5, eax
mulss xmm2, xmm6
andps xmm3, xmm5
movaps xmm7, [rdx]
addss xmm2, xmm2
movaps xmm6, [rdx - 16]
addss xmm0, xmm2
mulss xmm0, xmm3
ret 0
bnPowF ENDP


ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.