Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Calculer des puissances

7 réponses
Avatar
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.

7 réponses

Avatar
garnote
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." a écrit dans le 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.




Avatar
Nicolas B.
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." a écrit dans le
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.




Avatar
garnote
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." a écrit dans le 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." a écrit dans le
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.








Avatar
Nicolas B.
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." a écrit dans le
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." a écrit dans le
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.








Avatar
garnote
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." a écrit dans le 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." a écrit dans le
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." a écrit dans le
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.












Avatar
Nicolas B.
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." a écrit dans le
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." a écrit dans le
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." a écrit dans le
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.












Avatar
garnote
15 chiffres significatifs, qui disaient; pff...

:-)))

Serge

"Nicolas B." a écrit dans le message de
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." a écrit dans le
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." a écrit dans le
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." a écrit dans le
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.