Téléchargé 4 fois
Vote des utilisateurs
0
0
Détails
Référencé dans
Navigation
La racine carrée du nombre
La racine carrée du nombre
Ce code présente une racine carrée à l'aide du module decimal
C'est aussi un moyen de découvrir comment se fait cette opération...
""" Cette fonction produit la racine carrée du nombre, et
elle commence par définir la partie entière de la racine².
Qui en général a une virgule flottante ( point décimal )
"""
# Nombre à forme décimale
""" Une décimale au format texte a un meilleur suivi
Tests:"""
# :nombre = Decimal('22135323.12554'):
# imageoo2 = 22135323.125540000000000000000000000000000000...
#...00000000000000000000000000000000000000000000000000000000
# :nombre = Decimal(22135323.12554):
# imageoo2 = 22135323.125539999455213546752929687500000000...
#...00000000000000000000000000000000000000000000000000000000
"""Le nombre_carre utilise le module decimal...
La racine carrée réelle a forme générique
Pour les opérations et les comparaisons
Le traité se porte sur le nombre (ex:13.25)
Les nombres négatifs en string dans le code
Au vu du capable complexe de nombre_carre..."""
***
Précision décimale aidant le nombre calculé
La racine carrée réelle de : 3**2
ou bien de : (42-32)**-2
Prémice de nouvelles formes opératoires
Autorités en terme général tant que logiques...?
C'est aussi un moyen de découvrir comment se fait cette opération...
""" Cette fonction produit la racine carrée du nombre, et
elle commence par définir la partie entière de la racine².
Qui en général a une virgule flottante ( point décimal )
"""
# Nombre à forme décimale
""" Une décimale au format texte a un meilleur suivi
Tests:"""
# :nombre = Decimal('22135323.12554'):
# imageoo2 = 22135323.125540000000000000000000000000000000...
#...00000000000000000000000000000000000000000000000000000000
# :nombre = Decimal(22135323.12554):
# imageoo2 = 22135323.125539999455213546752929687500000000...
#...00000000000000000000000000000000000000000000000000000000
"""Le nombre_carre utilise le module decimal...
La racine carrée réelle a forme générique
Pour les opérations et les comparaisons
Le traité se porte sur le nombre (ex:13.25)
Les nombres négatifs en string dans le code
Au vu du capable complexe de nombre_carre..."""
***
Précision décimale aidant le nombre calculé
La racine carrée réelle de : 3**2
ou bien de : (42-32)**-2
Prémice de nouvelles formes opératoires
Autorités en terme général tant que logiques...?
Bonjour,
Je vous propose un nouvel élément à utiliser : La racine carrée du nombre
Ce code présente une racine carrée à l'aide du module decimal
C'est aussi un moyen de découvrir comment se fait cette opération...
Qu'en pensez-vous ?
Je vous propose un nouvel élément à utiliser : La racine carrée du nombre
Ce code présente une racine carrée à l'aide du module decimal
C'est aussi un moyen de découvrir comment se fait cette opération...
Qu'en pensez-vous ?
Bonjour,
Selon l'objectif de ce code, voir aussi la méthode de Heron d'Alexandrie qui est très efficace, bien qu'elle ait 2000 ans...: https://fr.wikipedia.org/wiki/M%C3%A9thode_de_H%C3%A9ron.
Selon l'objectif de ce code, voir aussi la méthode de Heron d'Alexandrie qui est très efficace, bien qu'elle ait 2000 ans...: https://fr.wikipedia.org/wiki/M%C3%A9thode_de_H%C3%A9ron.
Bonjour
Ce programme recherche la racine carrée du nombre de son côté décimal, à partir de la racine entière il va par dizaines incrémentées trouver leurs points de rupture. Ainsi : Décimale = (0.01) est incrémentée = {(0.02), (0.03), (0.04)...}. Si quand elle parvient à (0.05), et que la racine entière à laquelle est ajouté la partie décimale. Ainsi : racine = 33.05, si racine**2 est supérieure à nombre. C'est que sa part décimale a trouvée son point de rupture.
Ensuite, puisque ce n'est pas terminé. On ajoute une dizaine supplémentaire, ainsi : (0.041) a une chance de rencontrer sa rupture par incrémentation. Comme on peut le comprendre, c'est la partie décimale qui est en cours du traitement principal. Un travail de grammage sur les nombres, sans apport géométrique.
Ce programme recherche la racine carrée du nombre de son côté décimal, à partir de la racine entière il va par dizaines incrémentées trouver leurs points de rupture. Ainsi : Décimale = (0.01) est incrémentée = {(0.02), (0.03), (0.04)...}. Si quand elle parvient à (0.05), et que la racine entière à laquelle est ajouté la partie décimale. Ainsi : racine = 33.05, si racine**2 est supérieure à nombre. C'est que sa part décimale a trouvée son point de rupture.
Ensuite, puisque ce n'est pas terminé. On ajoute une dizaine supplémentaire, ainsi : (0.041) a une chance de rencontrer sa rupture par incrémentation. Comme on peut le comprendre, c'est la partie décimale qui est en cours du traitement principal. Un travail de grammage sur les nombres, sans apport géométrique.
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | #!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
# Nombre au carré << nombre2carrex.py >>
from decimal import *
def nombre_carre(nbr):
""" Cette fonction produit la racine carrée du nombre, et
elle commence par définir la partie entière de la racine².
Qui en général a une virgule flottante ( point décimal )
"""
# Racine² décimale entière
wh = int(nbr ** Decimal('.5'))
# Plus de précision peut être désapointant
getcontext().prec = 100 # max = 100000000
# Secteur décimal
decitab = []
recital = 0
copieur = [0]
entiere = wh
print('entiere =', entiere)
www = top = i9 = 0
while (Decimal(image[0]) ** 2) < nbr and top == 0:
iii = 0
# print('WWW ', recital[0])
for i in range(1, 10):
if i == 1:
print('i1', i, '...WFIimage', image[0])
print('...WFIrecital', recital)
if decitab:
image[0] = (str(entiere) + '.' + recital + str(i))
if iii < 2:
print('iii', i, '...FIIimage =', image[0])
iii += 1
else:
image[0] = (str(entiere) + '.' + str(i))
print(www, 'IEimage =', image[0])
if Decimal(image[0]) ** 2 > nbr:
decitab.append(i - 1)
recital = (''.join(str(d) for d in decitab))
print('i', i, 'Isuprecital =', recital)
image[0] = (str(entiere) + '.' + recital)
print(www, 'Isupimage =', image[0])
if Decimal(image[0]) ** 2 == nbr: # 1 Valide
rondeur[0] = 'Juste racine²'
top = 1
break
break
elif i == 9:
# i9 = 9**1
i9 += 1
# 9658754876325698546785421556487982 Valide
if i9 > 100:
top = 1
print('___i', i, '___OK i9', i9)
if Decimal(image[0]) ** 2 == nbr:
rondeur[0] = 'Juste racine²'
top = 1
break
decitab.append(i)
recital = (''.join(str(d) for d in decitab))
image[0] = Decimal(str(entiere) + '.' + recital)
# image[0] = Decimal(float(image[0]))
print(www, 'ELimage =', (image[0]), 'i9', i9)
print('i9', i, 'ELrecital =', recital)
elif Decimal(image[0]) ** 2 == nbr:
rondeur[0] = 'Juste racine²'
top = 1
break
print('* * * Bimage =', image[0])
print('* * * * * * * recital[0]', recital)
www += 1
# break
else:
print('Eimage =', (image[0]), '______')
# Contrôle des dizaines
wer = .1
while Decimal(image[0]) ** 2 > nbr:
mer = str(wer)[2:]
copieur[0] = Decimal(str(entiere) + '.' + recital + mer)
print('EEE ', copieur[0], 'mer', mer, 'len', len(mer))
print('.EE ', Decimal(copieur[0]) ** 2, wer)
print('')
wer /= 10
if len(str(wer)) > 5:
break
if not nbr:
rondeur[0] = 1
print('REELrecite =', recital, len(str(recital)))
print('REELnombre =', nbr, '; type =', nbr % 6, len(str(nbr)))
print('REELracine =', nbr ** .5, len(str(nbr ** .5)))
nombre = 56325468791546857 # 96587548785421556487982
print('nombre =', nombre)
image = {0: 0}
rondeur = {}
nombre_carre(nombre)
print('image =', image[0], '\nimageoo2 =', (Decimal(image[0]) ** 2))
if rondeur:
print('Rondeur :', rondeur[0])
else:
rondeur[0] = 'Valeur intervalle'
print('Rondeur :', rondeur[0],
'\n', nombre - (Decimal(image[0]) ** 2)) |
Satisfait de ce bout de chemin réalisé avec le nombre, et plus particulièrement sa racine carrée.
Le mode de lecture basique ne suffisait pas à résoudre le problème de clarté des opérations, alors après maintes et maintes virevoltes au milieu des décimales.
Décimales écosystématiques, redondance visible lorsqu'elles s'occupent des floats. Le monde décimal a besoin d'une technique de déchiffrage qui me dépasse, heureusement le calcul élémentaire a eu finalement raison.
Maintenant les choses sont plus claires, et la racine carrée est liée a ce petit programme fort simple. Dont le rendu n'est pas compliqué...
Le mode de lecture basique ne suffisait pas à résoudre le problème de clarté des opérations, alors après maintes et maintes virevoltes au milieu des décimales.
Décimales écosystématiques, redondance visible lorsqu'elles s'occupent des floats. Le monde décimal a besoin d'une technique de déchiffrage qui me dépasse, heureusement le calcul élémentaire a eu finalement raison.
Maintenant les choses sont plus claires, et la racine carrée est liée a ce petit programme fort simple. Dont le rendu n'est pas compliqué...
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
# Nombre au carré << nombre6carrea.py >>
from decimal import *
def resume():
print("""Le nombre_carre utilise le module decimal...
La racine carrée réelle a forme générique
Pour les opérations et les comparaisons
Le traité se porte sur le nombre (ex:13.25)
Les nombres négatifs en string dans le code
Au vu du capable complexe de nombre_carre...""")
def nombre_carre(nbr):
""" Cette fonction produit la racine carrée du nombre, et
elle commence par définir la partie entière de la racine².
Qui en général a une virgule flottante ( point décimal )
"""
nbr = Decimal(nbr)
if nbr < -0:
nbr = Decimal(str(nbr)[1:])
rondeur[1] = 1
# Précision.Allusion.Illusion.
""" Modulation unaire"""
if len(str(nbr)) < 10:
precision = (len(str(nbr)) + 1) * 10
precisive = '(*10)'
elif 10 <= len(str(nbr)) < 50:
precision = int(len(str(nbr)) ** 1.75)
precisive = '(**1.75)'
elif 50 <= len(str(nbr)) < 100:
precision = int(len(str(nbr)) ** 1.5)
precisive = '(**1.5)'
else:
precision = int(len(str(nbr)) ** 1.125)
precisive = '(**1.125)'
getcontext().prec = precision
# Maximum(machine locale) = 100000000
# Racine² décimale entière
wh = int(nbr ** Decimal(.5))
wh0 = (nbr ** Decimal(.5))
nbu = nbr
# Secteur décimal
decitab = []
if rondeur[1] == 1:
entiere[0] = str('-' + str(wh))
else:
entiere[0] = str(wh)
print('entiere =', entiere[0])
www = nbrdec = top = 0
while image[0] ** 2 < nbr and top == 0:
for i in range(1, 10):
if decitab:
image[0] = Decimal(entiere[0] + '.' + recital[0] + str(i))
else:
image[0] = Decimal(entiere[0] + '.' + str(i))
nbrdec += 1 # Nombre de décimales
if image[0] ** 2 > nbr:
decitab.append(i - 1)
nbrdec += 1 # Nombre de décimales
recital[0] = (''.join(str(d) for d in decitab))
image[0] = Decimal(entiere[0] + '.' + recital[0])
if image[0] ** 2 == nbr:
rondeur[0] = 'Juste racine² | nbr |'
top = 1
break
break
elif i == 9:
if image[0] ** 2 == nbr:
rondeur[0] = 'Juste racine² | i9 |'
top = 1
break
decitab.append(i)
nbrdec += 1 # Nombre de décimales
recital[0] = (''.join(str(d) for d in decitab))
image[0] = Decimal(entiere[0] + '.' + recital[0])
elif image[0] ** 2 == nbr:
rondeur[0] = 'Juste racine² | elif |'
top = 1
break
# print(www, '°°° **2 =', image[0] ** 2)
www += 1
else:
if len(str(rondeur[0])) < 1:
rondeur[2] = 'Variant racine² | not |'
nb6 = Decimal('6')
if rondeur[1] == 1:
nbr = Decimal('-' + str(nbr))
wh0 = Decimal('-' + str(wh0))
nb6 = Decimal('-' + '6')
sq0 = wh0
print('Rnombre =', nbr, ';type =', nbr % nb6)
if sq0 ** 2 == nbu:
print('_Reelle_juste =', sq0)
else:
print('_Rracine =', sq0)
print(',... (', nbrdec, ') Precision', precision, precisive)
# Nombre à forme décimale
""" Une décimale au format texte a un meilleur suivi """
# :nombre = '22135323.12554':
# imageoo2 = 22135323.125540000000000000000000000000000000...
# ...00000000000000000000000000000000000000000000000000000000
# :nombre = 22135323.12554:
# imageoo2 = 22135323.125539999455213546752929687500000000...
# ...00000000000000000000000000000000000000000000000000000000
"""."""
nombre = 1 # Permission math [-0 exclu]
nombre = str(Decimal(nombre))
image = {0: 0}
rondeur = {0: '', 1: 0}
entiere = {0: ''}
recital = [0]
nombre_carre(nombre) # Appel principal
if recital[0] != 0:
recital[0] = str(image[0])[len(entiere[0]) + 1:]
print('Rrecital =', recital[0])
oo2 = image[0] ** 2
if rondeur[1] == 1:
oo2 = Decimal('-' + str(oo2))
print('Iimageoo1 =', image[0],
'\nIimageoo2 =', oo2)
if rondeur[0]:
print('Rondeur 0:', rondeur[0])
elif rondeur[2]:
print('Rondeur 2:', rondeur[2], '\nReste =',
Decimal(nombre) - ((image[0]) ** 2))
else:
rondeur[0] = 'Valeur intervalle'
print('Rondeur 0:', rondeur[0], '\nReste =',
Decimal(nombre) - ((image[0]) ** 2))
print('.*')
resume()
# |
Je viens de mettre à jour l'en cours, en simplifiant la saisie du nombre. Se faisant en format texte directement.
La définition du typage (%6) se porte non plus seulement sur le nombre entier, mais également sur sa partie décimale.
Les nombres 23154. et 23154.0 sont admis et modifiés. Car dans le résultat (23154,23154.,23154.0) sont inégaux.
La définition du typage (%6) se porte non plus seulement sur le nombre entier, mais également sur sa partie décimale.
Les nombres 23154. et 23154.0 sont admis et modifiés. Car dans le résultat (23154,23154.,23154.0) sont inégaux.
:
| Code : | Sélectionner tout |
# Séparation décimale pour typage(%6)
La séparation décimale est une argumentation qui a un double tranchant lorsqu'il s'agit de relever le type(reste(n%6)) d'un nombre réel, où le point décimal crée la limite entre la partie entière du nombre réel et sa part décimale. La démarche a commencée quand le nombre réel avait pour partie visible décimale, l'image exacte de celle du nombre réel. D'où la poursuite en mode séparé, un type(%6) spécifique à chacune.
| Code : | Sélectionner tout |
decim6 = 6 # Type 6: Supérieur à *(_TTG_)*
Ce pourquoi la valeur par défaut qui ne sera jamais atteinte par un typage(%6) sur le nombre.
| Code : | Sélectionner tout |
# Recherche du point décimal
La recherche du point décimal facilite un prochain calcul, au sujet de la proportion relative à la partie entière du nombre réel.
| Code : | Sélectionner tout |
# Mesure.Decimale
La mesure décimale prend en charge l'opération des typages aux mentions (Entier.Décimal).
Juste avant 
| Code : | Sélectionner tout |
nombre_carre(nombre) # Appel principal
Ce qui est à venir, va permettre de calculer aux normes du module decimal (espoir content)
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
"""."""
nombre = '4'
# Séparation décimale pour typage(%6)
# *(_TableTypeGénéral = [0,1,2,3,4,5]_)*
decim6 = 6 # Type 6: Supérieur à *(_TTG_)*
# Recherche du point décimal
for i in nombre:
if i == '.':
nentie = len(str(int(float(nombre)))) # Poids.Entier.fort
break
else:
# Nombre.Entier
nentie = len(str(int(nombre))) # Poids.Entier.faible
nmasse = len(nombre) # Masse.Nombre
nmedif = nmasse - nentie # Mesure.Decimale
ndecim = nombre[nentie + 1:] # Masse.Decimale
""" Nombre réel aux poids(types): Entier.Decimal"""
# Mesure.Decimale
if nmedif != 0:
fnd = 0
for nd in ndecim:
fnd += int(nd) # Addition ndecim(nd)
if fnd != 0: # Somme positive
break # Nombre.Décimal
if fnd == 0 or nombre[-1] == '.':
# Nombre.Entier
nombre = nombre[:nentie]
else:
decim6 = int(nombre[nentie + 1:]) % 6
# Condition nombre négatif
if nombre[0] == '-':
decim6 = int(str('-' + str(decim6)))
image = {0: 0}
rondeur = {0: '', 1: 0}
entiere = {0: ''}
recital = [0]
nombre_carre(nombre) # Appel principal |
Pour un nombre x = nombre = '652315487.23265487'
Pour un appel (dec) ou "
L'algorithme de Héron d'Alexandrie
" SANS GUILLEMETS
| Code : | Sélectionner tout |
1 2 3 4 | >>> Decimal(dec)**2
Decimal('652315487.2326549291610717773437499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999')
>>> Decimal(_Reelle_juste)**2
Decimal('652315487.2326548700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000') |
Pour un appel (
_Reelle_juste
) ou "
L'algorithme de Python"
Ou,
Ou,
L'algorithme de Héron d'Alexandrie
" AVEC GUILLEMETS
" AVEC GUILLEMETS
En revenant sur le code qui m'intéresse, c'est en essayant plusieurs combinaisons opératoires, que je me suis aperçu d'un manque contextuel "Decimal".
Puisqu'à ce moment du programme le contexte décimal n'est pas encore évalué par le code, donc en ayant ajouté un contexte.
Le nombre calculé a pris une autre dimension, ainsi que la suite opérationnelle qui suit, et un nouveau résultat...
Portion de l'opération sur laquelle était nécessaire un apport contextuel :
Comme étant satisfait de cette favorable issue, je vous propose le code général en Python 
Puisqu'à ce moment du programme le contexte décimal n'est pas encore évalué par le code, donc en ayant ajouté un contexte.
Le nombre calculé a pris une autre dimension, ainsi que la suite opérationnelle qui suit, et un nouveau résultat...
Portion de l'opération sur laquelle était nécessaire un apport contextuel :
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | def opera(nop):
"""Fonction opératoire"""
def addition(i, j):
return i + j
def soustraction(i, j):
return i - j
def multiplie(i, j):
return i * j
def expose(i, j):
return i ** j
def division(i, j):
return i / j
def diventier(i, j):
return i // j
def modulo(i, j):
return i % j
signe = {'+': addition, '-': soustraction, '*': multiplie,
'**': expose, '/': division, '//': diventier,
'%': modulo}
getcontext().prec = len(nop)*50 # CONTEXTE
nbr1 = Decimal(nop[0])
operation = signe[nop[1]]
nbr2 = Decimal(nop[2])
opombre[0] = str(operation(nbr1, nbr2))
if 'E' in opombre[0] or 'e' in opombre[0]:
op_e = []
op_o = len(opombre[0])
for ie in range(op_o - 1, 0, -1):
if opombre[0][ie] in ("E", '+', '-'):
break
else:
op_e.append(opombre[0][ie])
op_r = list(reversed(op_e))
op_j = (''.join(str(o0) for o0 in op_r))
getcontext().prec = int(op_j) + op_o
opombre[0] = str(operation(nbr1, nbr2)) |
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 |
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
# Nombre au carré << nombre10carre.py >>
from decimal import *
def resume():
print("""Le nombre_carre utilise le module decimal...
La racine carrée réelle a forme générique
Pour les opérations et les comparaisons
Le traité se porte sur le nombre (ex:13.25)
Les nombres négatifs en string dans le code
Au vu du capable complexe de nombre_carre...""")
def espec6(ome):
""" Séparation décimale pour typage(%6)
# *(_TableTypeGénéral = [0,1,2,3,4,5]_)*
# Type 6: Supérieur à *(_TTG_)"""
# Recherche du point décimal
if '.' in ome:
nentie = 0 # Poids.Entier.fort
for me in ome:
nentie += 1
if me == '.':
break
else:
# Nombre.Entier
nentie = len(str(int(ome))) # Poids.Entier.faible
nmasse = len(ome) # Masse.Nombre
nmedif = nmasse - nentie # Mesure.Decimale
ndecim = ome[nentie:] # Masse.Decimale
# Mesure.Decimale
if nmedif != 0:
fnd = 0
for nd in ndecim:
fnd += int(nd) # Addition ndecim(nd)
if fnd != 0: # Somme positive
decim6[0] = int(ndecim) % 6
# Condition nombre négatif
if ome[0] == '-':
decim6[0] = int(str('-' + str(decim6[0])))
break
def opera(nop):
"""Fonction opératoire"""
def addition(i, j):
return i + j
def soustraction(i, j):
return i - j
def multiplie(i, j):
return i * j
def expose(i, j):
return i ** j
def division(i, j):
return i / j
def diventier(i, j):
return i // j
def modulo(i, j):
return i % j
signe = {'+': addition, '-': soustraction, '*': multiplie,
'**': expose, '/': division, '//': diventier,
'%': modulo}
getcontext().prec = len(nop)*50
nbr1 = Decimal(nop[0])
operation = signe[nop[1]]
nbr2 = Decimal(nop[2])
opombre[0] = str(operation(nbr1, nbr2))
if 'E' in opombre[0] or 'e' in opombre[0]:
op_e = []
op_o = len(opombre[0])
for ie in range(op_o - 1, 0, -1):
if opombre[0][ie] in ("E", '+', '-'):
break
else:
op_e.append(opombre[0][ie])
op_r = list(reversed(op_e))
op_j = (''.join(str(o0) for o0 in op_r))
getcontext().prec = int(op_j) + op_o
opombre[0] = str(operation(nbr1, nbr2))
def nombre_carre(nbr):
""" Cette fonction produit la racine carrée du nombre, et
elle commence par définir la partie entière de la racine².
Qui en général a une virgule flottante ( point décimal )
La polarité du nombre signé, forme une transition (+-)
Analyse de la surface(Typique = Nombre % 6)
1 = 7 % 6 :7%6: Pôle positif naturel
-1 = -7 % -6 :-7%-6: Pôle négatif naturel
5 = -7 % 6 :-7%6: Transit positif naturel
-5 = 7 % -6 :7%-6: Transit négatif naturel
"""
nbr = Decimal(nbr)
if nbr <= -0:
nbr = Decimal(str(nbr)[1:])
rondeur[1] = 1
# Précision.Allusion.Illusion.
premax = 100000000
""" Modulation unaire"""
if len(str(nbr)) < 10:
precision = (len(str(nbr)) + 1) * 10
precisive = '(*10)'
elif 10 <= len(str(nbr)) < 50:
precision = int(len(str(nbr)) ** 2)
precisive = '(**2)'
elif 50 <= len(str(nbr)) < 100:
precision = int(len(str(nbr)) ** 1.75)
precisive = '(**1.75)'
elif 100 <= (int(len(str(nbr)))) < premax:
precision = int(len(str(nbr)) ** 1.25)
precisive = '(**1.25)'
else:
return
getcontext().prec = precision
# Maximum(machine locale) = 100000000
# Racine² décimale entière
wh = int(nbr ** Decimal(.5))
wh0 = (nbr ** Decimal(.5))
nbu = nbr
# Secteur décimal
decitab = []
if rondeur[1] == 1:
entiere[0] = str('-' + str(wh))
else:
entiere[0] = str(wh)
print('entiere =', entiere[0])
www = nbrdec = nc = top = 0
while image[0] ** 2 <= nbr and top == 0:
for img in range(1, 10):
if decitab:
image[0] = Decimal(entiere[0] + '.' + recital[0] + str(img))
else:
if not nc:
nbrdec += 1 # Unité décimale
nc = 1
image[0] = Decimal(entiere[0] + '.' + str(img))
if image[0] ** 2 > nbr:
decitab.append(img - 1)
nbrdec += 1 # Nombre de décimales
recital[0] = (''.join(str(d) for d in decitab))
image[0] = Decimal(entiere[0] + '.' + recital[0])
if image[0] ** 2 == nbr:
rondeur[0] = 'Juste racine² | nbr |'
top = 1
break
break
elif img == 9:
if image[0] ** 2 == nbr:
rondeur[0] = 'Juste racine² | i9 |'
top = 1
break
decitab.append(img)
nbrdec += 1 # Nombre de décimales
recital[0] = (''.join(str(d) for d in decitab))
image[0] = Decimal(entiere[0] + '.' + recital[0])
elif image[0] ** 2 == nbr:
rondeur[0] = 'Juste racine² | elif |'
top = 1
recital[0] = str(image[0])[len(entiere[0]) + 1:]
break
# print(www, '°°° **2 =', image[0] ** 2)
www += 1
else:
if len(str(rondeur[0])) < 1:
rondeur[2] = 'Variant racine² | not |'
nb0 = str(int(nbr) % 6)
if rondeur[1] == 1:
nbr = Decimal('-' + str(nbr))
wh0 = Decimal('-' + str(wh0))
nb0 = '-' + nb0
sq0 = wh0
if decim6[0] < 6:
print('Rnombre =', nbr, ';typo =', [nb0,
'.', str(decim6[0])])
else:
print('Rnombre =', nbr, ';typo =', [nb0])
if sq0 ** 2 == nbu:
print('_Rreelle_juste =', sq0)
else:
print('_Rracine =', sq0)
print('*... (', nbrdec, ') Precision', precision, precisive)
# Nombre à forme décimale
""" Une décimale au format texte a un meilleur suivi """
# :nombre = '22135323.12554':
# imageoo2 = 22135323.125540000000000000000000000000000000...
# ...00000000000000000000000000000000000000000000000000000000
# :nombre = 22135323.12554:
# imageoo2 = 22135323.125539999455213546752929687500000000...
# ...00000000000000000000000000000000000000000000000000000000
"""."""
# Parenthèses non gérées
nombre = '-.5 ** 2'
# Mathématique sur nombres
opsigne = ['+', '-', '*', '/', '%', '**', '//'] # Signes math
opforme = ['(', ')', '='] # Formes math
opserie = [] # Collecte éléments
opombre = ['']
nn0 = nn1 = nn2 = 0
oo0 = oo1 = ''
for no in nombre:
oo0 += no
nn2 += 1
if no in opsigne and nn0 != 0 \
and len(oo1) < 2:
oo1 += no
pp = len(oo0) - 1
if oo1 in opsigne:
if nn1 == 0:
opserie.append(oo0[:pp])
oo0 = ''
if oo1 not in opsigne and len(oo1) > 1:
oo0 = oo1[1]
oo1 = oo1[0]
nn1 = 1
nn1 = 1
elif no in opforme: # Gestion paranthèse
pass
elif no == ' ': # Gestion espace blanc
pass
else:
if nn1 == 1:
opserie.append(oo1)
oo1 = ''
nn1 = 0
nn0 += 1
if len(nombre) == nn2 and oo0 \
and oo0 != nombre:
opserie.append(oo0)
# Série opération
if opserie:
opera(opserie)
if opombre[0] != '':
nombre = opombre[0]
# Séparation décimale pour typage(%6)
decim6 = [6]
espec6(nombre)
image = {0: 0} # Dico.Nombre réel
rondeur = {0: '', 1: 0} # Dico.Comment
entiere = {0: ''} # Dico.Racine.Entier
recital = [0] # Table.Décimale
nombre_carre(nombre) # Appel principal
if recital[0] != 0:
recital[0] = str(image[0])[len(entiere[0]) + 1:]
print('Rrecital =', recital[0], '\n...*')
oo2 = image[0] ** 2
if rondeur[1] == 1:
oo2 = Decimal('-' + str(oo2))
print('Iimageoo1 =', image[0], '\n..**',
'\nIimageoo2 =', oo2)
print('.***')
if image[0]:
if rondeur[0]:
print('Rondeur 0:', rondeur[0])
elif rondeur[2]:
print('Rondeur 2:', rondeur[2], '\nReste =',
Decimal(nombre) - ((image[0]) ** 2))
else:
rondeur[0] = 'Valeur intervalle'
print('Rondeur 0:', rondeur[0], '\nReste =',
Decimal(nombre) - ((image[0]) ** 2))
else:
if float(nombre) == 0:
print('Rrondeur : Juste réro limite | zéro |')
else:
print('Rrondeur : Juste hors limite | premax |')
# resume()
# |
Bonsoir
Afin d'alléger le visuel donné par le code qui trie les éléments d'une équation suivants : Signes. Parenthèses.
Ne sera présenté que le bout de code en question
Le but est d'obtenir la séquence des opérations respectant la priorité principale des parenthèses, de relever les signes opératoires de l'équation, et qu'à chaque opération soit appliqué la précision décimale du module decimal. Mieux que l'instruction "eval", n'ayant pas cette précision, je présume.
Pour l'instant, les nombres ou opérandes ne sont pas construits. Puis il reste à créer les valeurs intermédiaires avant d'obtenir le résultat final, sous la forme d'un nombre réel. Et aussi passer le cap de l'erreur actuelle, car la fonction decimal6 n'a pas de nombre à grignoter...
À suivre 
Afin d'alléger le visuel donné par le code qui trie les éléments d'une équation suivants : Signes. Parenthèses.
Ne sera présenté que le bout de code en question
Le but est d'obtenir la séquence des opérations respectant la priorité principale des parenthèses, de relever les signes opératoires de l'équation, et qu'à chaque opération soit appliqué la précision décimale du module decimal. Mieux que l'instruction "eval", n'ayant pas cette précision, je présume.
Pour l'instant, les nombres ou opérandes ne sont pas construits. Puis il reste à créer les valeurs intermédiaires avant d'obtenir le résultat final, sous la forme d'un nombre réel. Et aussi passer le cap de l'erreur actuelle, car la fonction decimal6 n'a pas de nombre à grignoter...
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | # Dispatchage d'une équation
nombre = '(12*((-.5 ** -2)+(4+3 ))) -3' # = -39.0
# Mathématique sur nombres
opsigne = ['+', '-', '%', '*', '/', '**', '//'] # Signes math
opforme = ['(', ')', '='] # Formes math
opobjet = ''.join(str(o) for o in range(10))+'.'
oparfer = [] # Parenthèses fermantes
oparouv = [] # Parenthèses ouvrantes
optrucs = [] # Collecte signes
opblanc = [] # Collecte blancs
opimage = [] # Points réalisés
opserie = [] # Collecte nombres à calculer
opombre = [''] # Nombre calculé
print('nombre =', nombre)
n0n = 0
for no in nombre:
if no in opforme:
if no == '(':
oparouv.append(n0n) # Contrôle parenthèses
else:
oparfer.append(n0n)
opimage.append(no)
elif no in opsigne:
optrucs.append(n0n)
opimage.append(no)
elif no in opobjet:
opimage.append(n0n)
elif no == ' ':
opblanc.append(n0n)
opimage.append(no)
n0n += 1
print()
print('oparouv', oparouv, 'oparfer', oparfer)
print('optrucs', optrucs, 'opblanc', opblanc)
print('opimage', opimage)
print('______________________________',)
# Positionnements des parenthèses ?(())?
optotal = len(nombre) # Blancs inclus
oparent = len(oparouv)
opstage = [[]] * oparent
o1 = o3 = 0
for ouv in range(oparent):
o1 -= 1
parouv = oparouv[o1]
aro = o2 = parouv
while o2 < optotal:
aro += 1
if aro in oparfer:
for ops in opstage:
if aro in ops:
break
else:
o3 -= 1
opstage[o3] = [parouv, aro]
break
o2 += 1
print('opstage',opstage)
# Traitement des signes ?(**,//)?
signes = []
s0s = ''
o0 = 0
if optrucs:
while 1:
if o0 < len(optrucs) - 1 \
and optrucs[o0+1] - optrucs[o0] == 1:
s0s += nombre[optrucs[o0]]
s0s += nombre[optrucs[o0+1]]
if s0s in opsigne:
signes.append(s0s)
s0s = ''
o0 += 1
else:
signes.append(s0s[:-1])
s0s = ''
else:
s0s += nombre[optrucs[o0]]
signes.append(s0s)
s0s = ''
if o0 == len(optrucs)-1:
print('SIG', signes)
break
o0 += 1 |
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.