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.