π
<-

QCC 2019 épisode 6 : performances & Python

QCC 2019 épisode 6 : performances & Python

Unread postby critor » 07 Sep 2019, 11:49

5409
Quelle Calculatrice programmable Choisir 2019 - Episode 6
Performances et Python


Nous clôturons aujourd'hui la série des nouveaux tests QCC 2019, avec les performances.

Dans un premier temps, nous allons évaluer les performances de calcul en virgule flottante grâce à un programme dans le langage historique de chaque machine. Parce que le langage historique est normalement le plus intégré au système et illustre ainsi bien les performances globales. Prenons pour cela le script Python suivant, qui sera traduit ligne à ligne pour chaque calculatrice :
Code: Select all
try:
  from time import *
except:
  pass

def hastime():
  try:
    monotonic()
    return True
  except:
    return False

def seuil(d):
  timed,n=hastime(),0
  start,u=0 or timed and monotonic(),2.
  d=d**2
  while (u-1)**2>=d:
    u=1+1/((1-u)*(n+1))
    n=n+1
  return [(timed and monotonic() or 1)-start,n,u]


Nous allons réaliser le test dans deux contextes :
  • le contexte exact, le plus souvent par défaut et inutile ici
  • le contexte numérique (calculs décimaux approchés) optimal pour ce script

En effet la plupart des calculatrices offrent le choix d'obtenir des résultat décimaux ou exacts lorsque possible, et selon le mode courant cela peut influer sur les performances.

Si l'on se donne la peine de régler le mode numérique, l'appel seuil(0.008) donne le classement suivant :
  1. 0,498s : NumWorks N0110 (32 bits : Cortex-M7/ARMv7 @216MHz)
  2. 0,688s : HP Prime G2 (32 bits : Cortex-A7/ARMv7 @528MHz)
  3. 0,785s : NumWorks N0100 (32 bits : Cortex-M4/ARMv7 @100MHz)
  4. 2,19s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz overclocké @274,91MHz via Ftune3 avec l'interpréteur C.Basic)
  5. 2,23s : Casio Graph 35/75+E (32 bits : SH4 @29,49MHz overclocké @267,78MHz via Ftune2 avec l'interpréteur C.Basic)
  6. 2,37s : Casio Graph 90+E (32 bits : SH4 @117,96MHz @58,98MHz overclocké @274,91MHz via Ptune3 avec l'interpréteur C.Basic)
  7. 2,41s : HP Prime G1 (32 bits : ARM9/ARMv5 @400MHz)
  8. 3,75s : Casio Graph 90+E (32 bits : SH4 @117,96MHz avec l'interpréteur C.Basic)
  9. 8,93s : TI-Nspire CX II (32 bits : ARM9/ARMv5 @396MHz)
  10. 10,02s : TI-Nspire (32 bits : ARM9/ARMv5 overclocké @120MHz @150MHz via Nover)
  11. 11,11s : Casio Graph 35+E II (32 bits : SH4 @58,98 avec l'interpréteur C.Basic)
  12. 12,24s : TI-Nspire (32 bits : ARM9/ARMv5 @120MHz)
  13. 12,9s : Casio Graph 35/75+E (32 bits : SH4 @29,49MHz avec l'interpréteur C.Basic)
  14. 18,64s : TI-Nspire CX CR4+ (révisions W+) (32 bits : ARM9/ARMv5 @156MHz overclocké @216MHz via Nover)
  15. 18,94s : TI-Nspire CX CR4+ (révisions W+) (32 bits : ARM9/ARMv5 @156MHz)
  16. 19,56s : TI-Nspire CX (révisions A-V) (32 bits : ARM9/ARMv5 @132MHz overclocké @222MHz via Nover)
  17. 20,92s : TI-Nspire CX (révisions A-V) (32 bits : ARM9/ARMv5 @132MHz)
  18. 25,26s : Casio Graph 35/75+E (32 bits : SH4 @29,49MHz overclocké @267,78MHz via Ftune2)
  19. 29,31s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz overclocké @274,91MHz via Ftune3)
  20. 38,15s : Casio Graph 90+E (32 bits : SH4 @117,96MHz overclocké @270,77MHz via Ptune3)
  21. 50,77s : Casio Graph 90+E (32 bits : SH4 @117,96MHz)
  22. 81,03s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz)
  23. 101,1s : Casio Graph 35/75+E (32 bits : SH4 @29,49MHz)
  24. 117,29s : Casio Graph 25+E (32 bits : SH4 @29,49MHz)
  25. 120,51s : TI-83 Premium CE Edition Python / TI-84 Plus CE-T (révisions M+) (8 + 32 bits : eZ80 @48MHz)
  26. 171,31s : TI-83 Premium CE / TI-84 Plus CE-T (révisions A-L) (8 bits : eZ80 @48MHz accéléré via AWSC)
  27. 196,79s : TI-83 Premium CE / TI-84 Plus CE-T (révisions A-L) (8 bits : eZ80 @48MHz)
  28. 260,41s : TI-82 Advanced / TI-84 Plus T (8 bits : z80 @15MHz)
  29. 607,91s : Casio fx-CP400+E (32 bits : SH4 @117,96MHz)
  30. 672,65s : Casio fx-92+ Spéciale Collège (8 bits : nX-U8/100 >1,5MHz - spécifications ancien modèle fx-92 Collège 2D+, non confirmées sur le nouveau)
  31. 798,18s : Esquisse GCEXFR / Lexibook GC3000FR (non programmable, estimation relative par comparaison des performances en tracé de graphes avec le modèle le plus proche technologiquement, la TI-82 Advanced)


Revenons donc maintenant en mode exact, fonctionnement donc par défaut des machines si on ne fait pas attention. Pour le même appel seuil(0.008) il y a quelques changements :
  1. 0,498s : NumWorks N0110 (32 bits : Cortex-M7/ARMv7 @216MHz)
  2. 0,785s : NumWorks N0100 (32 bits : Cortex-M4/ARMv7 @100MHz)
  3. 2,19s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz overclocké @274,91MHz via Ftune3 avec l'interpréteur C.Basic)
  4. 2,23s : Casio Graph 35/75+E (32 bits : SH4 @29,49MHz overclocké @267,78MHz via Ftune2 avec l'interpréteur C.Basic)
  5. 2,37s : Casio Graph 90+E (32 bits : SH4 @117,96MHz @58,98MHz overclocké @274,91MHz via Ptune3 avec l'interpréteur C.Basic)
  6. 3,75s : Casio Graph 90+E (32 bits : SH4 @117,96MHz avec l'interpréteur C.Basic)
  7. 11,11s : Casio Graph 35+E II (32 bits : SH4 @58,98 avec l'interpréteur C.Basic)
  8. 11,26s : TI-Nspire CX II (32 bits : ARM9/ARMv5 @396MHz)
  9. 12,9s : Casio Graph 35/75+E (32 bits : SH4 @29,49MHz avec l'interpréteur C.Basic)
  10. 16,3s : TI-Nspire (32 bits : ARM9/ARMv5 overclocké @120MHz @150MHz via Nover)
  11. 16,51s : HP Prime G2 (32 bits : Cortex-A7/ARMv7 @528MHz)
  12. 20,32s : TI-Nspire (32 bits : ARM9/ARMv5 @120MHz)
  13. 23,6s : TI-Nspire CX CR4+ (révisions W+) (32 bits : ARM9/ARMv5 @156MHz overclocké @216MHz via Nover)
  14. 24,45s : TI-Nspire CX (révisions A-V) (32 bits : ARM9/ARMv5 @132MHz overclocké @222MHz via Nover)
  15. 25,23s : TI-Nspire CX CR4+ (révisions W+) (32 bits : ARM9/ARMv5 @156MHz)
  16. 25,26s : Casio Graph 35/75+E (32 bits : SH4 @29,49MHz overclocké @267,78MHz via Ftune2)
  17. 28,42s : TI-Nspire CX (révisions A-V) (32 bits : ARM9/ARMv5 @132MHz)
  18. 29,31s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz overclocké @274,91MHz via Ftune3)
  19. 38,15s : Casio Graph 90+E (32 bits : SH4 @117,96MHz overclocké @270,77MHz via Ptune3)
  20. 43,13s : HP Prime G1 (32 bits : ARM9/ARMv5 @400MHz)
  21. 50,77s : Casio Graph 90+E (32 bits : SH4 @117,96MHz)
  22. 81,03s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz)
  23. 104,05s : Casio Graph 35/75+E (32 bits : SH4 @29,49MHz)
  24. 119,57s : Casio Graph 25+E (32 bits : SH4 @29,49MHz)
  25. 152,27s : TI-83 Premium CE Edition Python / TI-84 Plus CE-T (révisions M+) (8 bits : eZ80 @48MHz)
  26. 262,82s : TI-82 Advanced / TI-84 Plus T (8 bits : z80 @15MHz)
  27. 311,51s : TI-83 Premium CE / TI-84 Plus CE-T (révisions A-L) (8 bits : eZ80 @48MHz accéléré via AWSC)
  28. 355,52s : TI-83 Premium CE / TI-84 Plus CE-T (révisions A-L) (8 bits : eZ80 @48MHz)
  29. 672,65s : Casio fx-92+ Spéciale Collège (8 bits : nX-U8/100 >1,5MHz - spécifications ancien modèle fx-92 Collège 2D+, non confirmées sur le nouveau)
  30. 798,18s : Esquisse GCEXFR / Lexibook GC3000FR (non programmable, estimation relative par comparaison des performances en tracé de graphes avec le modèle le plus proche technologiquement, la TI-82 Advanced)
  31. 9297,47s : Casio fx-CP400+E (32 bits : SH4 @117,96MHz)




Avec le même script, passons maintenant sur l'évaluateur Python lorsque disponible. L'appel seuil(0.008) nous donne :
  1. 0,27s : TI-Nspire CX (révisions A-V) (32 bits : ARM9/ARMv5 @132MHz overclocké @222MHz via Nover avec l'interpréteur MicroPython)
  2. 0,376s : HP Prime G2 (32 bits : Cortex-A7/ARMv7 @528MHz)
  3. 0,38s : TI-Nspire (32 bits : ARM9/ARMv5 overclocké @120MHz @150MHz via Nover avec l'interpréteur MicroPython)
  4. 0,47s : TI-Nspire (32 bits : ARM9/ARMv5 @120MHz avec l'interpréteur MicroPython)
  5. 0,48s : TI-Nspire CX (révisions A-V) (32 bits : ARM9/ARMv5 @132MHz avec l'interpréteur MicroPython)
  6. 0,498s : NumWorks N0110 (32 bits : Cortex-M7/ARMv7 @216MHz)
  7. 0,53s : TI-Nspire CX CR4+ (révisions W+) (32 bits : ARM9/ARMv5 @156MHz overclocké @216MHz via Nover avec l'interpréteur MicroPython)
  8. 0,59s : Casio Graph 35/75+E (32 bits : SH4 @29,49MHz overclocké @267,78MHz via Ftune2 avec l'interpréteur CasioPython)
  9. 0,68s : TI-Nspire CX CR4+ (révisions W+) (32 bits : ARM9/ARMv5 @156MHz avec l'interpréteur MicroPython)
  10. 0,785s : NumWorks N0100 (32 bits : Cortex-M4/ARMv7 @100MHz)
  11. 0,79s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz overclocké @274,91MHz via Ftune3 avec l'interpréteur CasioPython)
  12. 1,61s : HP Prime G1 (32 bits : ARM9/ARMv5 @400MHz)
  13. 1,86s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz overclocké @274,91MHz via Ftune3)
  14. 2,15s : Casio Graph 90+E (32 bits : SH4 @117,96MHz overclocké @270,77MHz via Ptune3)
  15. 2,96s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz overclocké @274,91MHz via Ftune3 avec l'interpréteur KhiCAS)
  16. 3,27s : Casio Graph 90+E (32 bits : SH4 @117,96MHz)
  17. 3,65s : Casio Graph 90+E (32 bits : SH4 @117,96MHz overclocké @270,77MHz via Ptune3 avec l'interpréteur KhiCAS)
  18. 3,73s : TI-83 Premium CE + module externe TI-Python (8 + 32 bits : eZ80 @48MHz + Cortex-M0+/ARMv6 @48MHz)
  19. 3,9s : Casio Graph 35+E II (32 bits : SH4 @58,98 avec l'interpréteur CasioPython)
  20. 3,93s : TI-83 Premium CE Edition Python (8 + 32 bits : eZ80 @48MHz + Cortex-M0+/ARMv6 @48MHz)
  21. 4s : Casio Graph 35/75+E (32 bits : SH4 @29,49MHz avec l'interpréteur CasioPython)
  22. 4,4s : TI-83 Premium CE + module externe TI-Python (8 + 32 bits : eZ80 @48MHz + Cortex-M0+/ARMv6 @48MHz avec firmware CircuitPython)
  23. 5,48s : Casio Graph 90+E (32 bits : SH4 @117,96MHz avec l'interpréteur KhiCAS)
  24. 9,21s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz)
  25. 13,93s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz avec l'interpréteur KhiCAS)


Mais contrairement à la plupart des langages historiques, le Python distingue les nombres entiers des nombres flottants. Voici donc un script pour tester les calculs entiers en Python :
Code: Select all
try:from time import monotonic
except:pass

def hastime():
  try:
    monotonic()
    return True
  except:return False

def nodivisorin(n,l):
  for k in l:
    if n//k*k==n:
      return False
  return True

def isprimep(n):
  t=hastime()
  s,l,k=0 or t and monotonic(),[3],7
  if n==2 or n==5:return True
  if int(n)!=n or n//2*2==n or n//5*5==5:
    return False
  if n<k:return n in l
  while k*k<n:
    if nodivisorin(k,l):l.append(k)
    k+=2+2*((k+2)//5*5==k+2)
  r=nodivisorin(n,l)
  return (t and monotonic() or 1)-s,r


L'appel isprimep(10000019) nous donne donc le classement suivant en calcul entier :
  1. 0,42s : TI-Nspire CX (révisions A-V) (32 bits : ARM9/ARMv5 @132MHz overclocké @222MHz via Nover avec l'interpréteur MicroPython)
  2. 0,57s : TI-Nspire (32 bits : ARM9/ARMv5 overclocké @120MHz @150MHz via Nover avec l'interpréteur MicroPython)
  3. 0,58s : Casio Graph 35/75+E (32 bits : SH4 @29,49MHz overclocké @267,78MHz via Ftune2 avec l'interpréteur CasioPython)
  4. 0,581s : NumWorks N0110 (32 bits : Cortex-M7/ARMv7 @216MHz)
  5. 0,59s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz overclocké @274,91MHz via Ftune3 avec l'interpréteur CasioPython)
  6. 0,62s : TI-Nspire CX (révisions A-V) (32 bits : ARM9/ARMv5 @132MHz avec l'interpréteur MicroPython)
  7. 0,63s : TI-Nspire CX CR4+ (révisions W+) (32 bits : ARM9/ARMv5 @156MHz overclocké @216MHz via Nover avec l'interpréteur MicroPython)
  8. 0,67s : TI-Nspire (32 bits : ARM9/ARMv5 @120MHz avec l'interpréteur MicroPython)
  9. 0,86s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz overclocké @274,91MHz via Ftune3)
  10. 0,99s : TI-Nspire CX CR4+ (révisions W+) (32 bits : ARM9/ARMv5 @156MHz avec l'interpréteur MicroPython)
  11. 1,08s : Casio Graph 90+E (32 bits : SH4 @117,96MHz overclocké @270,77MHz via Ptune3)
  12. 1,17s : NumWorks N0100 (32 bits : Cortex-M4/ARMv7 @100MHz)
  13. 1,58s : Casio Graph 90+E (32 bits : SH4 @117,96MHz)
  14. 3,02s : Casio Graph 35+E II (32 bits : SH4 @58,98 avec l'interpréteur CasioPython)
  15. 4,39s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz)
  16. 4,42s : HP Prime G2 (32 bits : Cortex-A7/ARMv7 @528MHz)
  17. 4,98s : Casio Graph 35/75+E (32 bits : SH4 @29,49MHz avec l'interpréteur CasioPython)
  18. 8,1s : TI-83 Premium CE + module externe TI-Python (8 + 32 bits : eZ80 @48MHz + Cortex-M0+/ARMv6 @48MHz)
  19. 9s : TI-83 Premium CE Edition Python (8 + 32 bits : eZ80 @48MHz + Cortex-M0+/ARMv6 @48MHz)
  20. 11,26s : TI-83 Premium CE + module externe TI-Python (8 + 32 bits : eZ80 @48MHz + Cortex-M0+/ARMv6 @48MHz avec firmware CircuitPython)
  21. 16,05s : HP Prime G1 (32 bits : ARM9/ARMv5 @400MHz)
  22. 19,06s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz overclocké @274,91MHz via Ftune3 avec l'interpréteur KhiCAS)
  23. 22,77s : Casio Graph 90+E (32 bits : SH4 @117,96MHz overclocké @270,77MHz via Ptune3 avec l'interpréteur KhiCAS)
  24. 32,76s : Casio Graph 90+E (32 bits : SH4 @117,96MHz avec l'interpréteur KhiCAS)
  25. 91,71s : Casio Graph 35+E II (32 bits : SH4 @58,98MHz avec l'interpréteur KhiCAS)






Avant de conclure, une petite page de publicité pour la plus grande arnaque jamais vendue parmi les calculatrices graphiques en rayon scolaire :


Si les performances ont de l'importance pour toi, les meilleurs choix sont donc :
  • la NumWorks N0110 pour les performances générales
  • la TI-Nspire CX (révision A-V) pour le Python (hors mode examen uniquement :#non#:)
  • la HP Prime G2 pour le Python en mode examen
Le meilleur compromis de performances semble être la NumWorks N0110, dans le sens où contrairement aux autres elle ne s'effondre pas dans les classements où elle n'est pas première, et en prime sans aucun besoin d'installation d'application additionnelle ou d'overclocking ! :bj:

Citons également la Casio Graph 35+E II qui, munie des bons outils hors mode examen (CasioPython et Ftune3) s'en sort remarquablement bien par rapport à son prix, d'environ ~60€ seulement, sur lequel Casio te rembourse en prime 10€ pour tout achat à neuf d'ici le 30 septembre ! :bj:


A très bientôt pour le classement final de rentrée 2019 à la fois pour les BAC 2020 et 2021+ ! ;)
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 47%
 
Posts: 41940
Images: 15615
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: QCC 2019 épisode 6 : performances & Python

Unread postby critor » 07 Sep 2019, 14:09

Voici un diagramme pour la première moitié de l'épisode, avec les performances générales (langage historique) de chaque machine en modes numérique et exact :


On voit un peu mieux qui c'est qui sort du lot; le couple NumWorks/HP qui se bât pour la première place, suivi de près par Casio, puis Texas Instruments, puis Lexibook/Esquisse/Leclerc.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 47%
 
Posts: 41940
Images: 15615
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: QCC 2019 épisode 6 : performances & Python

Unread postby critor » 07 Sep 2019, 15:00

Et maintenant le même diagramme pour les performances Python, contextes flottants et entiers :
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 47%
 
Posts: 41940
Images: 15615
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: QCC 2019 épisode 6 : performances & Python

Unread postby reminoel » 07 Sep 2019, 18:47

Bonjour,
2 petites coquilles dans la fonction isprimep:
la ligne 20 doit se terminer par "==n:"
et la ligne 23 doit avoir un "<=".
Cordialement.
User avatar
reminoel
Niveau 0: MI (Membre Inactif)
Niveau 0: MI (Membre Inactif)
Level up: 0%
 
Posts: 2
Joined: 07 Sep 2019, 18:40
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: QCC 2019 épisode 6 : performances & Python

Unread postby critor » 07 Sep 2019, 19:01

Ah, merci beaucoup. :)

Par contre je n'ai pas le temps là de refaire toute la batterie de tests.

Je prendrai donc le script corrigé pour les tests futurs : en cours d'année si il y a des nouveautés, ou sinon pour la rentrée 2020.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 47%
 
Posts: 41940
Images: 15615
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: QCC 2019 épisode 6 : performances & Python

Unread postby parisse » 07 Sep 2019, 19:22

A vrai dire, j'ai beaucoup de mal a comprendre la fonction isprimep. Pourquoi ne pas avoir teste :
Code: Select all
def isprimep(x):
    for k in range(2,x):
        if k*k>x:
            return True
        if x % k == 0:
            return False
    return x==2

C'est beaucoup plus simple tout en testant aussi multiplication et division euclidienne, c'est significativement plus rapide (tout en restant tres lent par rapport a d'autres tests de primalite puisque c'est une methode naive).
Ou alors faire un test de Miller-Rabin, qui permet de tester des operations sur des entiers de taille plus grande.
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 85.3%
 
Posts: 3648
Joined: 13 Dec 2013, 16:35
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: QCC 2019 épisode 6 : performances & Python

Unread postby critor » 07 Sep 2019, 19:49

Bonsoir.

La fonction saute les multiples de 2 et de 5 dans ses tests.

En fait elle était prévue pour construire et retourner la liste des diviseurs.
Sauf que j'ai supprimé ce retour, car la NumWorks avec ses 16K de mémoire de travail ne retournait alors rien d'autre qu'une erreur de mémoire sur le genre de nombres de l'exemple.

Elle n'est volontairement pas prévue pour être optimale. En effet si les tests se terminent tous en une fraction de seconde, il eut été dur de faire un classement précis.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 47%
 
Posts: 41940
Images: 15615
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: QCC 2019 épisode 6 : performances & Python

Unread postby reminoel » 07 Sep 2019, 19:54

La fonction isprimep de Critor est fondée sur le crible d'Erathostène, il est vrai plutôt adapté aux listes de nombres premiers qu'à un test de primalité. Mais pour tester la vitesse des calculatrices, cela ne me semble pas gênant...
User avatar
reminoel
Niveau 0: MI (Membre Inactif)
Niveau 0: MI (Membre Inactif)
Level up: 0%
 
Posts: 2
Joined: 07 Sep 2019, 18:40
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: QCC 2019 épisode 6 : performances & Python

Unread postby parisse » 08 Sep 2019, 06:54

reminoel wrote:La fonction isprimep de Critor est fondée sur le crible d'Erathostène, il est vrai plutôt adapté aux listes de nombres premiers qu'à un test de primalité. Mais pour tester la vitesse des calculatrices, cela ne me semble pas gênant...

Ce n'est pas non plus comme cela que je pense qu'il faut programmer le crible, en tout cas si on suit le principe de barrer les multiples de 2, puis de 3, puis de 5, etc. (http://fr.wikipedia.org/wiki/Crible_d%27%C3%89ratosth%C3%A8ne), dans un crible la boucle interieure ne contient pas de divisions euclidiennes, seulement des additions (ici implicites dans la boucle for/range) :
Code: Select all
    def premiers(n):
        prem=list(range(0,n))
        k=2
        while k*k<n :
            for j in range(2*k,n,k):
                prem[j]=0
            k += 1
            while prem[k]==0: k += 1
        return [k for k in prem if k!=0]

Les algorithmes vont etre lus par des lyceens et par des enseignants, il est dommage de ne pas utiliser des algorithmes comprehensibles et raisonnablement optimaux, il suffit ensuite d'adapter la taille de l'argument pour avoir le temps d'execution souhaitable pour mesurer les performances des calculatrices (disons de l'ordre de quelques secondes).
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 85.3%
 
Posts: 3648
Joined: 13 Dec 2013, 16:35
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: QCC 2019 épisode 6 : performances & Python

Unread postby parisse » 08 Sep 2019, 07:27

critor wrote:La fonction saute les multiples de 2 et de 5 dans ses tests.

En fait elle était prévue pour construire et retourner la liste des diviseurs.

Je ne comprends pas bien comment votre algorithme fonctionne pour construire une liste de diviseurs.

L'optimisation habituelle pour tester la primalite par division naive consiste a travailler modulo 6, on teste d'abord la divisibilite par 2, 3 et 5, puis pour k>=1 les nombres de la forme 6*k+1 et 6*k+5 (en effet 6*k, 6*k+2, 6*k+3 et 6*k+4 ne sont pas premiers si k>=1). Bien sur on pourrait aussi travailler modulo 10, en testant 2, 3, 5, 7 puis les nombres de la forme 10*k+1, 10*k+3, 10*k+7, 10*k+9, mais c'est moins efficace car cela fait tester 4 entiers sur 10, alors que modulo 6 on est a 1 entier sur 3.
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 85.3%
 
Posts: 3648
Joined: 13 Dec 2013, 16:35
Gender: Not specified
Calculator(s):
MyCalcs profile

Next

Return to News Divers

Who is online

Users browsing this forum: No registered users and 9 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
820 utilisateurs:
>770 invités
>42 membres
>8 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)