Longueur d'un entier

bonsoir

je suis un peu coincé avec une histoire de longeur d'entier , j'ai cré le bout de code suivant destiné à calculer la factorielle d'un entier

sauf qu'a partir de n = 13 j'ai le droit à un depacement de capacité ,

Function facto(x As Long) As Long
If x = 0 Then
facto = 1
Else
i = 1
n = 1
Do
n = n * i
i = i + 1
Loop Until i = x + 1
facto = n
End If
End Function

je me suis dit que c'est peut etre la facon de déclarer la variable x sous forme d'entier long qui ne suffit pas

existe t il un moyen de contourner cette limitation ?

Merci

Bonjour,

oui, tu peux déclarer ta variable comme double, tu pourras aller jusqu'à des nombres de l'ordre de grandeur de 10^308, mais tu n'auras pas nécessairement la précisionà l'unité près.

Contient des nombres à virgule flottante double précision signés IEEE 64 bits (8 octets) dont la valeur va de -1,79769313486231570E + 308 à -4.94065645841246544E-324 pour les valeurs négatives et de 4.94065645841246544E-324 à 1.7976931348481570E et 308 valeurs. Les nombres à double précision stockent une approximation d'un nombre réel.

Merci h2So4 , je vais tenter ca et te tiens au courant

purée !! c'est bien ca c'etait tout con , encor fallait il le savoir

je rend grace à ton intervention !! mille merci a toi h2So4 , il y a des pro sur le forum !!!

rebonjour,

mais malheureusement inutilisable pour un calcul de factorielle qui donne plus de 15 chiffres (car il y a perte de précision), Pour des calculs de précision sur des grands nombres il faut utiliser un add-in spécial (je ne retrouve plus les références) ou développer toi-même les fonctions de base nécessaires (addition, soustraction, multiplication, division, puissance, ...)

C est déjà pas mal je tenterai pas d aller jusqu a 15 chiffres pour les, résultat de mes calculs , merci à toi pour temps passé sur cette question

ca m'a bien aidé pour boucler le code suivant qui determine les dispositions possible de 16 personnes sur 6 postes numerotés

en sachant

que le premier poste recevra 3 personnes ,.

le second ; 3 personnes .

le troisieme : 2 personnes

le quatrieme: 2 personnes

le cinquieme : 2 personnes

et enfin le 6 ieme qui recevra 4 personnes

grace a ton indication sur le type de variable j'ai pu ecrire le bout de code suivant qui tourne bien et donne un apercu du calcul et du resultat.:

Sub dispositions()
Dim k As Double
t = Array(2, 3, 1)
u = Array(3, 2, 4)
s = p * 3 + q * 2 + r * 4
pr = 1
j = 0
Do
k = u(j)
x = x + u(j) * t(j)

      Do
        pr = pr * combinaison(s - z, k)
        visu = visu & "." & "C(" & s - z & "," & k & ")"
        z = z + k
       Loop Until z = x

j = j + 1

Loop Until 3 - j = 0
MsgBox Mid(visu, 2, Len(visu))
MsgBox pr
End Sub

associé à

Function combinaison(x As Double, y As Double) As Long
combinaison = facto(x) / (facto(y) * facto(x - y))
End Function

Function facto(x As Double) As Double
If x = 0 Then
facto = 1
Else
i = 1
n = 1
Do
n = n * i
i = i + 1
Loop Until i = x + 1
facto = n
End If
End Function

ardu !! mais ca donne le resultat attendu

Rechercher des sujets similaires à "longueur entier"