Calculer des puissances

Le
Nicolas B.
Bonjour,

Petit problème, qui est peut-être un poil HS.

J'essaye de calculer par VBA des puissances (2^128 par exemple) de façon
exacte (pas à 15 chiffres significatifs). La valeur retournée doit donc être
sous forme de texte, et les calculs "découpés" en morceaux. Mais pour
découper l'opération d'élévation à une puissance, je n'ai aucune idée.
J'ai pensé passer par des multiplications successives, mais je rame déjà
;-)

Quelqu'un aurait-il une solution ?


Merci
--
Nicolas B.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
garnote
Le #363293
2^128 = 340282366920938463463374607431768211456
Vais tenter de trouver un algorithme.
Mais si tu veux seulement la liste, je peux t'avoir ça.
Belle journée en perspective !

:-)

Serge


"Nicolas B." news: OSM0O#
Bonjour,

Petit problème, qui est peut-être un poil HS.

J'essaye de calculer par VBA des puissances (2^128 par exemple) de façon
exacte (pas à 15 chiffres significatifs). La valeur retournée doit donc
être

sous forme de texte, et les calculs "découpés" en morceaux. Mais pour
découper l'opération d'élévation à une puissance, je n'ai aucune idée.
J'ai pensé passer par des multiplications successives, mais je rame
déjà...

;-)

Quelqu'un aurait-il une solution ?


Merci
--
Nicolas B.




Nicolas B.
Le #363290
Salut Serge,

C'était trop facile 2^128, on le trouve sur le net :-)

C'est bien un algorithme qu'il me faut, et pas une liste. Aussi, ça serait
bien qu'il marche pour toutes les puissances, et pas seulement 2.

Ce problème dépasse mes capacités de calcul et de programmation ;-)


Merci
--
Nicolas B.


2^128 = 340282366920938463463374607431768211456
Vais tenter de trouver un algorithme.
Mais si tu veux seulement la liste, je peux t'avoir ça.
Belle journée en perspective !

:-)

Serge


"Nicolas B." message de news: OSM0O#
Bonjour,

Petit problème, qui est peut-être un poil HS.

J'essaye de calculer par VBA des puissances (2^128 par exemple) de
façon exacte (pas à 15 chiffres significatifs). La valeur retournée
doit donc être sous forme de texte, et les calculs "découpés" en
morceaux. Mais pour découper l'opération d'élévation à une
puissance, je n'ai aucune idée. J'ai pensé passer par des
multiplications successives, mais je rame déjà... ;-)

Quelqu'un aurait-il une solution ?


Merci
--
Nicolas B.




garnote
Le #363264
Yep !
2^200 1606938044258990275541962092341162602522202993782792835301376
et pas trouvé ça sur le net :-)))
1. Tu formates la colonne A texte,
2. tu entres 2 en A1,
3. Tu appelles la macro.

Ça me semble impec et devrait pouvoir s'adapter pour 3^n, 4^n ...

Sub Puissance_De_Deux()
Dim nn(10000) As String
Dim rep As String
For k = 2 To 200
d = Cells(k - 1, 1)
L = Len(d)
For i = 1 To L
c = 2 * Mid(d, L - i + 1, 1) + r
If c < 10 Then
nn(i) = c
r = 0
Else
nn(i) = Right(c, 1)
r = Left(c, 1)
If i = L Then nn(i) = c
End If
Next i
For j = i To 1 Step -1
rep = rep & nn(j)
Next j
Cells(k, 1) = rep
r = 0
rep = ""
Next k
End Sub

Serge


"Nicolas B." news:
Salut Serge,

C'était trop facile 2^128, on le trouve sur le net :-)

C'est bien un algorithme qu'il me faut, et pas une liste. Aussi, ça serait
bien qu'il marche pour toutes les puissances, et pas seulement 2.

Ce problème dépasse mes capacités de calcul et de programmation ;-)


Merci
--
Nicolas B.


2^128 = 340282366920938463463374607431768211456
Vais tenter de trouver un algorithme.
Mais si tu veux seulement la liste, je peux t'avoir ça.
Belle journée en perspective !

:-)

Serge


"Nicolas B." message de news: OSM0O#
Bonjour,

Petit problème, qui est peut-être un poil HS.

J'essaye de calculer par VBA des puissances (2^128 par exemple) de
façon exacte (pas à 15 chiffres significatifs). La valeur retournée
doit donc être sous forme de texte, et les calculs "découpés" en
morceaux. Mais pour découper l'opération d'élévation à une
puissance, je n'ai aucune idée. J'ai pensé passer par des
multiplications successives, mais je rame déjà... ;-)

Quelqu'un aurait-il une solution ?


Merci
--
Nicolas B.








Nicolas B.
Le #363248
Joli :-)

J'ai pas encore compris comment ça marchait, mais l'essentiel est que ça
donne le bon résultat !


A+
--
Nicolas B.


Yep !
2^200 > 1606938044258990275541962092341162602522202993782792835301376
et pas trouvé ça sur le net :-)))
1. Tu formates la colonne A texte,
2. tu entres 2 en A1,
3. Tu appelles la macro.

Ça me semble impec et devrait pouvoir s'adapter pour 3^n, 4^n ...

Sub Puissance_De_Deux()
Dim nn(10000) As String
Dim rep As String
For k = 2 To 200
d = Cells(k - 1, 1)
L = Len(d)
For i = 1 To L
c = 2 * Mid(d, L - i + 1, 1) + r
If c < 10 Then
nn(i) = c
r = 0
Else
nn(i) = Right(c, 1)
r = Left(c, 1)
If i = L Then nn(i) = c
End If
Next i
For j = i To 1 Step -1
rep = rep & nn(j)
Next j
Cells(k, 1) = rep
r = 0
rep = ""
Next k
End Sub

Serge


"Nicolas B." message de news:
Salut Serge,

C'était trop facile 2^128, on le trouve sur le net :-)

C'est bien un algorithme qu'il me faut, et pas une liste. Aussi, ça
serait bien qu'il marche pour toutes les puissances, et pas
seulement 2.

Ce problème dépasse mes capacités de calcul et de programmation ;-)


Merci
--
Nicolas B.


2^128 = 340282366920938463463374607431768211456
Vais tenter de trouver un algorithme.
Mais si tu veux seulement la liste, je peux t'avoir ça.
Belle journée en perspective !

:-)

Serge


"Nicolas B." message de news: OSM0O#
Bonjour,

Petit problème, qui est peut-être un poil HS.

J'essaye de calculer par VBA des puissances (2^128 par exemple) de
façon exacte (pas à 15 chiffres significatifs). La valeur retournée
doit donc être sous forme de texte, et les calculs "découpés" en
morceaux. Mais pour découper l'opération d'élévation à une
puissance, je n'ai aucune idée. J'ai pensé passer par des
multiplications successives, mais je rame déjà... ;-)

Quelqu'un aurait-il une solution ?


Merci
--
Nicolas B.








garnote
Le #363246
Et elle est bien bonne celle-là !
Je crois que la macro est valable, telle quelle,
pour 2^n, 3^n, 4^n ... 9^n.
For i = 1 To L
c = 2 * Mid(d, L - i + 1, 1) + r
Remplacer 2 par 3, 4, 5 ... et mettre 3, 4, 5 ... en A1.
Le truc c'est d'effectuer les multiplications par 2 comme
si on les faisait à la main.
9^100 26561398887587476933878132203577962682923345265339449597457
4961739092490901302182994384699044001
Résultat confirmé par le logiciel Maple.

Serge

"Nicolas B." news:
Joli :-)

J'ai pas encore compris comment ça marchait, mais l'essentiel est que ça
donne le bon résultat !


A+
--
Nicolas B.


Yep !
2^200 > > 1606938044258990275541962092341162602522202993782792835301376
et pas trouvé ça sur le net :-)))
1. Tu formates la colonne A texte,
2. tu entres 2 en A1,
3. Tu appelles la macro.

Ça me semble impec et devrait pouvoir s'adapter pour 3^n, 4^n ...

Sub Puissance_De_Deux()
Dim nn(10000) As String
Dim rep As String
For k = 2 To 200
d = Cells(k - 1, 1)
L = Len(d)
For i = 1 To L
c = 2 * Mid(d, L - i + 1, 1) + r
If c < 10 Then
nn(i) = c
r = 0
Else
nn(i) = Right(c, 1)
r = Left(c, 1)
If i = L Then nn(i) = c
End If
Next i
For j = i To 1 Step -1
rep = rep & nn(j)
Next j
Cells(k, 1) = rep
r = 0
rep = ""
Next k
End Sub

Serge


"Nicolas B." message de news:
Salut Serge,

C'était trop facile 2^128, on le trouve sur le net :-)

C'est bien un algorithme qu'il me faut, et pas une liste. Aussi, ça
serait bien qu'il marche pour toutes les puissances, et pas
seulement 2.

Ce problème dépasse mes capacités de calcul et de programmation ;-)


Merci
--
Nicolas B.


2^128 = 340282366920938463463374607431768211456
Vais tenter de trouver un algorithme.
Mais si tu veux seulement la liste, je peux t'avoir ça.
Belle journée en perspective !

:-)

Serge


"Nicolas B." message de news: OSM0O#
Bonjour,

Petit problème, qui est peut-être un poil HS.

J'essaye de calculer par VBA des puissances (2^128 par exemple) de
façon exacte (pas à 15 chiffres significatifs). La valeur retournée
doit donc être sous forme de texte, et les calculs "découpés" en
morceaux. Mais pour découper l'opération d'élévation à une
puissance, je n'ai aucune idée. J'ai pensé passer par des
multiplications successives, mais je rame déjà... ;-)

Quelqu'un aurait-il une solution ?


Merci
--
Nicolas B.












Nicolas B.
Le #363228
Oups, j'avais vérifié que pour les puissances de 2 et 4.

Pour dépasser les puissances de 10, il suffit d'arranger le calcul du reste
(qui peut être supérieur à 10, donc de plus d'un chiffre) :
If c < 10 Then
nn(i) = c
r = 0
Else
nn(i) = Right(c, 1)
r = Left(c, Len(c) - 1) 'c'est ici que ça boguait
If i = L Then nn(i) = c
End If


A+
--
Nicolas B.


Et elle est bien bonne celle-là !
Je crois que la macro est valable, telle quelle,
pour 2^n, 3^n, 4^n ... 9^n.
For i = 1 To L
c = 2 * Mid(d, L - i + 1, 1) + r
Remplacer 2 par 3, 4, 5 ... et mettre 3, 4, 5 ... en A1.
Le truc c'est d'effectuer les multiplications par 2 comme
si on les faisait à la main.
9^100 > 26561398887587476933878132203577962682923345265339449597457
4961739092490901302182994384699044001
Résultat confirmé par le logiciel Maple.

Serge

"Nicolas B." message de news:
Joli :-)

J'ai pas encore compris comment ça marchait, mais l'essentiel est
que ça donne le bon résultat !


A+
--
Nicolas B.


Yep !
2^200 >>> 1606938044258990275541962092341162602522202993782792835301376
et pas trouvé ça sur le net :-)))
1. Tu formates la colonne A texte,
2. tu entres 2 en A1,
3. Tu appelles la macro.

Ça me semble impec et devrait pouvoir s'adapter pour 3^n, 4^n ...

Sub Puissance_De_Deux()
Dim nn(10000) As String
Dim rep As String
For k = 2 To 200
d = Cells(k - 1, 1)
L = Len(d)
For i = 1 To L
c = 2 * Mid(d, L - i + 1, 1) + r
If c < 10 Then
nn(i) = c
r = 0
Else
nn(i) = Right(c, 1)
r = Left(c, 1)
If i = L Then nn(i) = c
End If
Next i
For j = i To 1 Step -1
rep = rep & nn(j)
Next j
Cells(k, 1) = rep
r = 0
rep = ""
Next k
End Sub

Serge


"Nicolas B." message de news:
Salut Serge,

C'était trop facile 2^128, on le trouve sur le net :-)

C'est bien un algorithme qu'il me faut, et pas une liste. Aussi, ça
serait bien qu'il marche pour toutes les puissances, et pas
seulement 2.

Ce problème dépasse mes capacités de calcul et de programmation ;-)


Merci
--
Nicolas B.


2^128 = 340282366920938463463374607431768211456
Vais tenter de trouver un algorithme.
Mais si tu veux seulement la liste, je peux t'avoir ça.
Belle journée en perspective !

:-)

Serge


"Nicolas B." message de news: OSM0O#
Bonjour,

Petit problème, qui est peut-être un poil HS.

J'essaye de calculer par VBA des puissances (2^128 par exemple)
de façon exacte (pas à 15 chiffres significatifs). La valeur
retournée doit donc être sous forme de texte, et les calculs
"découpés" en morceaux. Mais pour découper l'opération
d'élévation à une puissance, je n'ai aucune idée. J'ai pensé
passer par des multiplications successives, mais je rame déjà...
;-)

Quelqu'un aurait-il une solution ?


Merci
--
Nicolas B.












garnote
Le #363226
15 chiffres significatifs, qui disaient; pff...

:-)))

Serge

"Nicolas B." news:
Oups, j'avais vérifié que pour les puissances de 2 et 4.

Pour dépasser les puissances de 10, il suffit d'arranger le calcul du
reste

(qui peut être supérieur à 10, donc de plus d'un chiffre) :
If c < 10 Then
nn(i) = c
r = 0
Else
nn(i) = Right(c, 1)
r = Left(c, Len(c) - 1) 'c'est ici que ça boguait
If i = L Then nn(i) = c
End If


A+
--
Nicolas B.


Et elle est bien bonne celle-là !
Je crois que la macro est valable, telle quelle,
pour 2^n, 3^n, 4^n ... 9^n.
For i = 1 To L
c = 2 * Mid(d, L - i + 1, 1) + r
Remplacer 2 par 3, 4, 5 ... et mettre 3, 4, 5 ... en A1.
Le truc c'est d'effectuer les multiplications par 2 comme
si on les faisait à la main.
9^100 > > 26561398887587476933878132203577962682923345265339449597457
4961739092490901302182994384699044001
Résultat confirmé par le logiciel Maple.

Serge

"Nicolas B." message de news:
Joli :-)

J'ai pas encore compris comment ça marchait, mais l'essentiel est
que ça donne le bon résultat !


A+
--
Nicolas B.


Yep !
2^200 > >>> 1606938044258990275541962092341162602522202993782792835301376
et pas trouvé ça sur le net :-)))
1. Tu formates la colonne A texte,
2. tu entres 2 en A1,
3. Tu appelles la macro.

Ça me semble impec et devrait pouvoir s'adapter pour 3^n, 4^n ...

Sub Puissance_De_Deux()
Dim nn(10000) As String
Dim rep As String
For k = 2 To 200
d = Cells(k - 1, 1)
L = Len(d)
For i = 1 To L
c = 2 * Mid(d, L - i + 1, 1) + r
If c < 10 Then
nn(i) = c
r = 0
Else
nn(i) = Right(c, 1)
r = Left(c, 1)
If i = L Then nn(i) = c
End If
Next i
For j = i To 1 Step -1
rep = rep & nn(j)
Next j
Cells(k, 1) = rep
r = 0
rep = ""
Next k
End Sub

Serge


"Nicolas B." message de news:
Salut Serge,

C'était trop facile 2^128, on le trouve sur le net :-)

C'est bien un algorithme qu'il me faut, et pas une liste. Aussi, ça
serait bien qu'il marche pour toutes les puissances, et pas
seulement 2.

Ce problème dépasse mes capacités de calcul et de programmation ;-)


Merci
--
Nicolas B.


2^128 = 340282366920938463463374607431768211456
Vais tenter de trouver un algorithme.
Mais si tu veux seulement la liste, je peux t'avoir ça.
Belle journée en perspective !

:-)

Serge


"Nicolas B." message de news: OSM0O#
Bonjour,

Petit problème, qui est peut-être un poil HS.

J'essaye de calculer par VBA des puissances (2^128 par exemple)
de façon exacte (pas à 15 chiffres significatifs). La valeur
retournée doit donc être sous forme de texte, et les calculs
"découpés" en morceaux. Mais pour découper l'opération
d'élévation à une puissance, je n'ai aucune idée. J'ai pensé
passer par des multiplications successives, mais je rame déjà...
;-)

Quelqu'un aurait-il une solution ?


Merci
--
Nicolas B.
















Publicité
Poster une réponse
Anonyme