Je t'invite à modifier ton code "5*(1-((md+5)*5>reste))" par "0 if (md+5)*5>reste else 5"
Robic a écrit:La fonction 'devine' semble calculer la somme des termes de 1 à n, mais je ne comprends pas le rôle du 777. En fait ça a l'air de calculer 777+u(10)+u(9)+...+u(1).
Si c'est la somme des termes, ça me paraît quand même moins facile à comprendre avec la récursivité.
def f(n, a, b)
if n = 0 alors
retourner (a, b)
sinon
retourner f(n-1, (a+b)/2, sqrt((a^2+b^2)/2)takezo a écrit:Merci
C'est du Python 2.6 transposé en 3.4... Et puis, c'était un exercice de style.
Je vais essayer... Je ne sais pas tout sur Python, moi non plus.
C'est fait. C'est plus beau, mais sur 20000 décimales, c'est la même durée au 1/1000e près...
Demain je pousserai plus loin.
takezo a écrit:Voilà pour prouver que je plaisante pas :
- Code: Tout sélectionner
#!/usr/bin/env python
# -*- coding: UTF8 -*-
from time import process_time
def rac5(prc):
reste,md,finbcl,L=100,4,prc+1,["2"]
for j in range(finbcl):
md=10*md
i=5*(1-((md+5)*5>reste))
while (md+i)*i>> print (True+True)
2
>>>
D'autre part, quand j'écris :
i=5*(1-((md+5)*5>reste)) j'utilise bien True et False :
(md+5)*5>reste est soit True, soit False, et True et False sont automatiquement remplacés selon le cas par 1 ou 0 et le calcul effectué...
Précision : l'algorithme d'extraction de la racine carrée de 5 est basé sur la méthode de calcul à la main que j'ai apprise en classe de 4e et que bien peu de nouveaux profs connaissent...
Et voilà les 2 lignes que j'avais gardées cachées :
- Code: Tout sélectionner
from sys import setrecursionlimit
setrecursionlimit(100000)
Robic a écrit:Ce que disait Takezo est intéressant. Le ton de ses messages, c'est celui que chacun imagine puisque ce sont des messages écrits. Pour ma part j'ai lu ses messages sans rien remarquer d'inhabituel.
De plus, je ne trouve pas évident que la suitesoit la plus rapide pour calculer une floppée de décimales d'une racine carrée. Certes, elle converge très vite en nombre d'itérations, mais à chaque itération il faut inverser Un, ce qui va devenir de plus en plus long à mesure qu'on aura de plus en plus de décimales. Je m'attends plutôt à ce que les vieilles méthodes d'extraction de racines carrées, où l'on obtient les décimales une par une (*), soient en fin de compte plus efficaces (dans ce contexte où on cherche plein de décimales, pas en général).
Enfin, la "vraie" discussion est close depuis un moment (le problème a été résolu), du coup on est comme devant la machine à café : on digresse, on papote, mais c'est intéressant je trouve.
----
(*) Un jour, par curiosité, j'en ai regardé une, il me semble qu'on obtenait les décimales de deux en deux. En tout cas c'était un peu compliqué pour moi... :marteau:
zygomatique a écrit:je ne pensais pas que ça allait délirer autant sur le sujet (dans le bon sens bien sur) ....
j'avoue que je ne connais pas très bien tous ces nouveaux langages ... mais il semble donc que ça n'est guère mieux que si c'était plus pire ... :ptdr:
avec les progrès de ces 20 dernières années ben je trouve que c'est bien triste ... mais que signifie le mot progrès ....
pour en revenir à al récursivité ... et bien c'est beau, bref, concis ....
elle s'applique naturellement à tous les produits du modèle factorielle ... mais plus généralement à par exemple toutes les sommesoù f est une fonction
puisque
et moi je veux pouvoir faire cela sans m'occuper de la pile , ou la face ou je ne sais quoi d'autre ... mais si à 1000 ça stoppe ... ben mede alors !!!!
que un coup ça me sorte peut-être un "memory overflow" parce que je pousse un peu trop ok ... j'accepte bien ...
mais donc il semble bien qu'on n'est pas fait avancé réellement le schmilblick ...(enfin j'exagère un peu)
en arrivant à la fac on était en plein dans TURBOPASCAL que je trouvais très pédagogique car très rigoureux et structuré .... avec tout de même ce défaut de déclaration de variable très lourd ...
mais si on n'a plus de déclaration de variable mais que le langage "ne reconnaît" pas true + true c'est un peu dommage ....
à Robic ::: il me semble qu'il faudrait commencer à tester la divisibilité par 2 et non par 3 pour éliminer tout nombre pair ... ?
un modeste et humble programmeur ....
:lol3:
sinon, d'une part je n'ai pas apprécier ton ton de jeune branleur, et de plus,ce post n'a rien à faire dans le forum lycée. donc je n'y reviendrais plus.
loop(x->x^2, 5)
....i=5*(1-((md+5)*5>reste))
zygomatique a écrit:merci à chombier pour son post de 23h49 ...
et une question :: dans ton deuxième code ::
il se termine par
je ne comprends pas ce 5 ...
merci par avance ...
def devine2(u, n) :
def loop(a, n) :
si n = 0 alors
retourner a
sinon
retourner loop(a+u(n), n-1)
loop(0, n)
devine2(x->x^2, 5)def carre(x)
retourner x * x
devine2(carre, 5)def composition(f, g)
retourner x -> f(g(x)) ; cette procédure renvoie une autre procéduredef matrice-nulle?(M) : (* matrice-nulle? renvoie un booléen *)
retourner trace-matrice(mul-matrice(M, transposee-matrice(M)) = 0
def egal-matrice?(A, B)
retourner matrice-nulle?(sub-matrice(A, B))(define (matrice-nulle? m)
(= 0 (trace (mul-matrice m (transposee-matrice m)))))
(define (matrice-egal? A B)
(matrice-nulle? (sub-matrice A B)))Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 38 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :