cs_Kaizen
Messages postés7Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention17 janvier 2005 17 janv. 2005 à 08:17
Salut Cédric,
La racine n'ayant pas été corrigée, je te propose une racine entière qui fonctionne sous VBA...
Private Function Racin(nombre As String)
Dim NbImp As String
Dim LeReste As String
Dim Sous As String
If Len(nombre) Mod 2 1 Then nombre "0" & nombre
NbImp = 1
LeReste = ""
For I = 1 To Len(nombre) Step 2
Tranche = Mid$(nombre, I, 2)
LeReste = LeReste & Tranche
Sous = "1"
Do
If Mid$(LeReste, 1, 1) <> "-" Then
LeReste = soustraction(Mid$(LeReste, 1), Mid$(NbImp, 1))
Else
LeReste = addition(Mid$(LeReste, 2), Mid$(NbImp, 1))
LeReste = "-" & LeReste
End If
NbImp = addition(Mid$(NbImp, 1), "2")
Sous = addition(Mid$(Sous, 1), "1")
cond = Mid$(LeReste, 1, 1)
Loop While cond <> "-" Or cond = "0"
Sous = soustraction(Sous, 2)
NbImp = soustraction(Mid$(NbImp, 1), "2")
If Left$(LeReste, 1) = "-" Then
LeReste = soustraction(Mid$(LeReste, 2), Mid$(NbImp, 1))
LeReste = Mid$(LeReste, 2)
Else
LeReste = addition(Mid$(LeReste, 1), Mid$(NbImp, 1))
End If
NbImp = soustraction(Mid$(NbImp, 1), "2")
NbImp = addition(multi(addition(Mid$(NbImp, 1), 1), 10), 1)
res = res & Sous
Next
Racin = zero(Mid$(res, 1))
End Function
OBI76
Messages postés28Date d'inscriptionmardi 23 juillet 2002StatutMembreDernière intervention 4 janvier 2004 15 janv. 2005 à 22:46
c pas du tout comme ça que ca fonctionne dans la réalité, ils ne font que des développements limités... tu peux faire toutes les fonctions comme ça (a^b = e^b*ln(a)) c récurent et atteint une certaine précision au bout d'un certain nombre d'itération, maintenant ce qu'il faudrai voir c combien.....)
DHKold
Messages postés153Date d'inscriptionvendredi 6 décembre 2002StatutMembreDernière intervention29 mai 20052 19 sept. 2004 à 18:38
Désolé, j'étais absent ces derniers mois. Dès que j'ai le temps (rarement), je corrige les erreurs. Mais je ne ferai sans doute pas de gros ajouts, étant donné que je pense lacher en grande partie VB, pour travailler sur un language de bas-niveau comme l'assembleur, en parrallèle avec du C#/C++
cs_Kaizen
Messages postés7Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention17 janvier 2005 9 août 2004 à 09:47
Pour ma part, c'est justement ta version que j'utilise.
L'amélioration porte sur le typage, la lisibilité du code, les calculs préalables hors boucle.
L'intérêt du code étant de travailler sur des grands nombres et de l'utiliser à travers excel, une compilation sous C++ n'apporterait pas grand chose, si ce n'est de se traîner avec une DLL de plus.
Ce qui reste à creuser, c'est l'algorithme. Preuve en est sur Divis2(x) par rapport à Divis(x,2,faux)
Pour Racine(x) qui ne fonctionne pas, il faudrait réussir :
Puiss(x;0,5)
Mais ce code ne travaille pas avec les nombres à virgule.
Voire au delà de l'algorithme, ce qui reste à creuser c'est la connaissance des facteurs premiers de grands nombres, surtout quand il n'y en a que deux...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 6 août 2004 à 23:32
J'avais posté sur l'autre source une version améliorée du code...... si ca en interesse quelques uns, j'aimerai bien vos avis...... surtout toi, DHKold
cs_Kaizen
Messages postés7Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention17 janvier 2005 5 août 2004 à 17:52
Je crois que c'est pour éviter une notation scientifique et outrepasser la limite des type de donnée lors de calcul sur des nombres astronomiques.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 5 août 2004 à 11:15
Pourquoi utiliser des String ?
cs_Kaizen
Messages postés7Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention17 janvier 2005 5 août 2004 à 10:07
La racine ne fonctionne pas toujours...
Pour Puiss(x,y) j'ai fait ça :
Private Function puiss(x As String, expo)
Dim p As String
Dim i As Integer
p = "1"
i = 1
Do While i <= expo
p = multi(p, x)
i = i + 1
Loop
puiss = p
End Function
cs_Kaizen
Messages postés7Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention17 janvier 2005 27 juil. 2004 à 16:25
Bravo pour l'esprit de partage d'une telle qualité de travail...
Hormis le typage, ce code fonctionne aussi sur OpenOffice.Org
La division est cependant très lente.
Un petit rajout de la fonction Puiss(x,y) serait sympa
et un Carre(x) = Multi(x,x)
17 janv. 2005 à 08:17
La racine n'ayant pas été corrigée, je te propose une racine entière qui fonctionne sous VBA...
Private Function Racin(nombre As String)
Dim NbImp As String
Dim LeReste As String
Dim Sous As String
If Len(nombre) Mod 2 1 Then nombre "0" & nombre
NbImp = 1
LeReste = ""
For I = 1 To Len(nombre) Step 2
Tranche = Mid$(nombre, I, 2)
LeReste = LeReste & Tranche
Sous = "1"
Do
If Mid$(LeReste, 1, 1) <> "-" Then
LeReste = soustraction(Mid$(LeReste, 1), Mid$(NbImp, 1))
Else
LeReste = addition(Mid$(LeReste, 2), Mid$(NbImp, 1))
LeReste = "-" & LeReste
End If
NbImp = addition(Mid$(NbImp, 1), "2")
Sous = addition(Mid$(Sous, 1), "1")
cond = Mid$(LeReste, 1, 1)
Loop While cond <> "-" Or cond = "0"
Sous = soustraction(Sous, 2)
NbImp = soustraction(Mid$(NbImp, 1), "2")
If Left$(LeReste, 1) = "-" Then
LeReste = soustraction(Mid$(LeReste, 2), Mid$(NbImp, 1))
LeReste = Mid$(LeReste, 2)
Else
LeReste = addition(Mid$(LeReste, 1), Mid$(NbImp, 1))
End If
NbImp = soustraction(Mid$(NbImp, 1), "2")
NbImp = addition(multi(addition(Mid$(NbImp, 1), 1), 10), 1)
res = res & Sous
Next
Racin = zero(Mid$(res, 1))
End Function
15 janv. 2005 à 22:46
19 sept. 2004 à 18:38
9 août 2004 à 09:47
L'amélioration porte sur le typage, la lisibilité du code, les calculs préalables hors boucle.
L'intérêt du code étant de travailler sur des grands nombres et de l'utiliser à travers excel, une compilation sous C++ n'apporterait pas grand chose, si ce n'est de se traîner avec une DLL de plus.
Ce qui reste à creuser, c'est l'algorithme. Preuve en est sur Divis2(x) par rapport à Divis(x,2,faux)
Pour Racine(x) qui ne fonctionne pas, il faudrait réussir :
Puiss(x;0,5)
Mais ce code ne travaille pas avec les nombres à virgule.
Voire au delà de l'algorithme, ce qui reste à creuser c'est la connaissance des facteurs premiers de grands nombres, surtout quand il n'y en a que deux...
6 août 2004 à 23:32
5 août 2004 à 17:52
5 août 2004 à 11:15
5 août 2004 à 10:07
Pour Puiss(x,y) j'ai fait ça :
Private Function puiss(x As String, expo)
Dim p As String
Dim i As Integer
p = "1"
i = 1
Do While i <= expo
p = multi(p, x)
i = i + 1
Loop
puiss = p
End Function
27 juil. 2004 à 16:25
Hormis le typage, ce code fonctionne aussi sur OpenOffice.Org
La division est cependant très lente.
Un petit rajout de la fonction Puiss(x,y) serait sympa
et un Carre(x) = Multi(x,x)