FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
faire une addition - Je ne sais plus faire une addition!! Emptypar Froggy One Aujourd'hui à 11:16

» PANORAMIC V 1
faire une addition - Je ne sais plus faire une addition!! Emptypar Klaus Aujourd'hui à 10:28

» Gestion d'un système client-serveur.
faire une addition - Je ne sais plus faire une addition!! Emptypar Klaus Hier à 23:59

» @Jack
faire une addition - Je ne sais plus faire une addition!! Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
faire une addition - Je ne sais plus faire une addition!! Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
faire une addition - Je ne sais plus faire une addition!! Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
faire une addition - Je ne sais plus faire une addition!! Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
faire une addition - Je ne sais plus faire une addition!! Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
faire une addition - Je ne sais plus faire une addition!! Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
faire une addition - Je ne sais plus faire une addition!! Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
faire une addition - Je ne sais plus faire une addition!! Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
faire une addition - Je ne sais plus faire une addition!! Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
faire une addition - Je ne sais plus faire une addition!! Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
faire une addition - Je ne sais plus faire une addition!! Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
faire une addition - Je ne sais plus faire une addition!! Emptypar leclode Mer 17 Avr 2024 - 11:07

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -21%
LEGO® Icons 10329 Les Plantes Miniatures, ...
Voir le deal
39.59 €

 

 Je ne sais plus faire une addition!!

Aller en bas 
+2
Yannick
Klaus
6 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
Invité
Invité




faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyLun 28 Fév 2011 - 2:25

Etant en attende d'une idée avec mes problèmes de fichiers, pour me changer les idées, j'ai fais ce programme, car je ne sais plus compter???

Par contre j'ai fais une drôle de constatation au final.
Code:

' méthode d'addition

dim nombre%(10) ,a% ,l% ,a$(10)  ,b$ ,c$ ,b% ,col% ,cumul%,pt% ,nb%
data 125735,42572,99233,7846647,86559,46956,124987,38455,155583,28787924
for a%=1 to 10:read nombre%(a%):next a%

width 0,1000:font_size 0,14:font_name 0,"Courier New":height 0,600

list 1:height 1,460:width 1,30:left 1,10
list 2:height 2,460:width 2,30:left 2,40
list 3:height 3,460:width 3,30:left 3,70
list 4:height 4,460:width 4,30:left 4,100
list 5:height 5,460:width 5,30:left 5,130
list 6:height 6,460:width 6,30:left 6,160
list 7:height 7,460:width 7,30:left 7,190
list 8:height 8,460:width 8,30:left 8,220
list 9:height 9,460:width 9,30:left 9,250

edit 11:top 11,470:left 11,10:width 11,30 :text 11,0
edit 12:top 12,470:left 12,40:width 12,30 :text 12,0
edit 13:top 13,470:left 13,70:width 13,30 :text 13,0
edit 14:top 14,470:left 14,100:width 14,30:text 14,0
edit 15:top 15,470:left 15,130:width 15,30:text 15,0
edit 16:top 16,470:left 16,160:width 16,30:text 16,0
edit 17:top 17,470:left 17,190:width 17,30:text 17,0
edit 18:top 18,470:left 18,220:width 18,30:text 18,0
edit 19:top 19,470:left 19,250:width 19,30:text 19,0
alpha 53:left 53,320:top 53,470:caption 53,"total des colonnes"

edit 21:top 21,500:left 21,10:width 21,30 :text 21,0
edit 22:top 22,500:left 22,40:width 22,30 :text 22,0
edit 23:top 23,500:left 23,70:width 23,30 :text 23,0
edit 24:top 24,500:left 24,100:width 24,30:text 24,0
edit 25:top 25,500:left 25,130:width 25,30:text 25,0
edit 26:top 26,500:left 26,160:width 26,30:text 26,0
edit 27:top 27,500:left 27,190:width 27,30:text 27,0
edit 28:top 28,500:left 28,220:width 28,30:text 28,0
edit 29:top 29,500:left 29,250:width 29,30:text 29,0
edit 30:top 30,500:left 30,280:width 30,30:text 30,0
alpha 54:left 54,320:top 54,500:caption 54,"total des retenues"

edit 31:top 31,530:left 31,10:width 31,30 :font_bold 31
edit 32:top 32,530:left 32,40:width 32,30 :font_bold 32
edit 33:top 33,530:left 33,70:width 33,30 :font_bold 33
edit 34:top 34,530:left 34,100:width 34,30:font_bold 34
edit 35:top 35,530:left 35,130:width 35,30:font_bold 35
edit 36:top 36,530:left 36,160:width 36,30:font_bold 36
edit 37:top 37,530:left 37,190:width 37,30:font_bold 37
edit 38:top 38,530:left 38,220:width 38,30:font_bold 38
edit 39:top 39,530:left 39,250:width 39,30:font_bold 39
alpha 55:left 55,320:top 55,530:caption 55,"résultat colonne par colonne"
edit 56:hide 56

edit 51:width 51,300:height 51,30:color 51,255,204,50
edit 52:width 52,500:height 52,30:color 52,255,100,100:hide 52


list 50:left 50,650:width 50,30:height 50,200:color 50,204,255,51:hint 50,"ordre de lecture des colonnes
memo 100:width 100,250:left 100,700:height 100,300
rem afficher les chiffres des nombres
for a%=1 to 10
  b$=right$("000000000000"+str$(nombre%(a%)),9)
  for b%=1 to 9
      item_add b%,mid$(b$,b%,1):item_add b%,""
  next b%
  b$=right$("        "+str$(nombre%(a%)),9)
  item_add 100,b$
next a%
for a%=2 to 9:item_add a%,"":next a%
c$=""

rem faire un choix quelconque du calcul des colonnes
repeat
  a%=rnd(9)
  if instr (c$,str$(a%))=0 and a%>0 then item_add 50,a%:c$=c$+str$(a%)
until count(50)=9 or scancode=27

rem effacer les listes qui n'ont que des zéros
for a%=9 to 1 step -1: ' les colonnes, on regarde si toutes les lignes sont à zéro
  l%=0
  for b%=1 to count(1) step 2:' ligne
      if item_read$( a%,b%)<>"0" then l%=l%+1
  next b%
  if l%=0 then exit_for
next a%

rem les listes effacées, on les retirent pour le calcul
for b%=1 to a%
  clear b%
  for a%=1 to count(50)
      if val(item_read$(50,a%))=b% then item_delete 50,a% :exit_for
  next a%
next b%
message "on commence le calcul de l'addition, selon un ordre aléatoire, celui de la liste verte"
rem on calcule les colonnes au hazard
for col%=1 to count(50)
  if scancode=27 then exit_for
  a%=item_read$(50,col%): color a%,255,255,0
  left 51,left(a%) :left 52,left(a%)
  rem on commence
  cumul%=0: pt%=0
  for b%=1 to count(a%)-1 step 2
      top 51,b%*21-21:top 52,top(51)+21
      nb%=item_read$(a%,b%)
      text 51,str$(nb%)+" + "+str$(cumul%)+" = "+str$(cumul%+nb%)
      cumul%=cumul%+nb%
      if cumul%=>11 then show 52:else:hide 52

      if cumul%=>11
        text 52,str$(cumul%)+" - 11 = " + str$(cumul%-11)+" on marque un point"
        cumul%=cumul%-11:pt%=pt%+1:item_delete a%,b%+1:item_insert a%,b%+1,"*"
        wait 200
      end_if
      repeat:until scancode=0:repeat:until scancode=32 or scancode=27
      if scancode=27 then exit_for
  next b%
  rem  affichage des calculs de la colonne: le résultat et les retenues
  color a%+10,255,255,0:color a%+20,255,0,0
  text a%+10,cumul%
  text a%+20,pt%
  wait 1500:color a%+10,255,255,255:color a%+20,255,255,255

  color a%,255,255,255

  if scancode=27 then exit_for
next col% :hide 51
text 52,"":c$=""
message "maintenant on fait le calcul final"
rem resultat final
cumul%=0 :hide 52  :  show 51
  for a%=9 to 1 step -1
      text 51,"" :hide 52
      if c$<>"" then text 51,"retenu: "+c$+" + "
      color a%+10,0,255,0: left 51,left(a%)+30:top 51,470:text 51, text$(51)+text$(a%+10)+" + "
      repeat:until scancode=0:repeat:until scancode=32
      color a%+20,255,255,0:top 51,500:text 51,text$(51)+text$(a%+20)+" + "
      repeat:until scancode=0:repeat:until scancode=32
      color a%+21,255,0,0  :left 51,left(a%)+60

      cumul%=cumul%+val(text$(a%+10))+val(text$(a%+20))+val(text$(a%+21))
      text 51,text$(51)+ text$(a%+21) + " = " + str$(cumul%)
      color a%+30,204,204,255

      if cumul%<10
        text a%+30,cumul%:cumul%=0:c$=""
      else
        show 52:left 52,left(51):top 52,top(51)+30
        text 56,cumul%
        b$=right$(text$(56),1):c$=left$(text$(56),len(text$(56))-1)
        text a%+30,b$:cumul%=val(c$)
        text 52,"dépassement, on pose:"+b$+" on retient:"+c$
      end_if
      text 56,0
      repeat:until scancode=0:repeat:until scancode=32
      color a%+10,255,255,255:color a%+20,255,255,255:color a%+21,255,255,255:color a%+30,255,255,255
  next a%
  hide 51:hide 52

' contrôle
cumul%=0
for a%=1 to 10
cumul%=cumul%+nombre%(a%)
next a%
item_add 100,"--------------------"
item_add 100,cumul%
message "comparez le résultat du bas, et celui qui vient d'être fait dans la liste de droite"+chr$(13)+"A votre avis? quel est le bon résultat? voyez avec vos calculatrice!"

Une précision que j'ai oublié: il faut appuyer sur <SPACE> pour avancer

apporté une modification à 13.40 h
la discution de ce sujet s'est faite en rapport avec la version Panoramic du 12 février 2011, version 0.9.21i3, donc le bug concerne cette version. Depuis Jack a éditer une nouvelle version, celle du 4 mars 2011 0.9.21i4 qui corrige le bug (ceci pour ceux qui liront ce sujet dans les mois à venir.,


Dernière édition par cosmos70 le Sam 5 Mar 2011 - 16:00, édité 2 fois
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12277
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyLun 28 Fév 2011 - 10:06

Vraiment très étonnant ! Ma calculette donne évidemment le bon résultat (celui de gauche). Et on voit avec un rapide calcul, uniquement sur les unités de la liste de droite, que la somme des unités doit donner le chiffre 1 dans la colonne des unités, et pas le chiffre 2 ! Vraiment étonnant !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyLun 28 Fév 2011 - 13:49

J'avais fait une petite erreur. Celà ne fait pas de différence avec les nombres, tel qu'ils sont placés, elle se rattrapait la ligne suivante. Si cela s'était produit sur la ligne du bas des colonnes, je crois qu'il y aurait eu une erreur.

Dans les calculs, dès qu'on atteint 11, on met une retenu, et on soustrait onze, et là je l'avais fait à plus que onze
ligne 107 et 109.
Il y a un bug sur les additions, et cela a été la surprise de cette nuit. Je cherchais l'erreur sur mes opérations, et ne la trouvait pas, alors que c'est Panoramic qui provoque l'erreur. J'ai fait les essais avec le cumul du tableau nombre%() et aussi celui du memo, en pensant qu'il y avait un bug sur les tableaux, cela avait je crois déjà été le cas. Mais c'est le même résultat.

Je voulais mettre des nombres aléatoires, du coup pour bien montrer le bug, c'est resté ainsi.
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: re   faire une addition - Je ne sais plus faire une addition!! EmptyLun 28 Fév 2011 - 19:37

J'ai eu le même pb avec mon inutilitaire pour les tables
mais j'avoue que j'ai lâchement abandonné.

Embarassed
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12277
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyLun 28 Fév 2011 - 22:09

Je me suis permis d'apporter une petite modif dans ton programme. Dans le memo 100, j'ai ajouté une seconde colonne donnant la somme, ligne par ligne, des nombres du début jusqu'à cette ligne (incluse). Et on voit que l'erreur de calcul se produit sur la toute dernière addition:
Code:

' méthode d'addition

dim nombre%(10) ,a% ,l% ,a$(10)  ,b$ ,c$ ,b% ,col% ,cumul%,pt% ,nb%
data 125735,42572,99233,7846647,86559,46956,124987,38455,155583,28787924
for a%=1 to 10:read nombre%(a%):next a%

width 0,1000:font_size 0,14:font_name 0,"Courier New":height 0,600

list 1:height 1,460:width 1,30:left 1,10
list 2:height 2,460:width 2,30:left 2,40
list 3:height 3,460:width 3,30:left 3,70
list 4:height 4,460:width 4,30:left 4,100
list 5:height 5,460:width 5,30:left 5,130
list 6:height 6,460:width 6,30:left 6,160
list 7:height 7,460:width 7,30:left 7,190
list 8:height 8,460:width 8,30:left 8,220
list 9:height 9,460:width 9,30:left 9,250

edit 11:top 11,470:left 11,10:width 11,30 :text 11,0
edit 12:top 12,470:left 12,40:width 12,30 :text 12,0
edit 13:top 13,470:left 13,70:width 13,30 :text 13,0
edit 14:top 14,470:left 14,100:width 14,30:text 14,0
edit 15:top 15,470:left 15,130:width 15,30:text 15,0
edit 16:top 16,470:left 16,160:width 16,30:text 16,0
edit 17:top 17,470:left 17,190:width 17,30:text 17,0
edit 18:top 18,470:left 18,220:width 18,30:text 18,0
edit 19:top 19,470:left 19,250:width 19,30:text 19,0
alpha 53:left 53,320:top 53,470:caption 53,"total des colonnes"

edit 21:top 21,500:left 21,10:width 21,30 :text 21,0
edit 22:top 22,500:left 22,40:width 22,30 :text 22,0
edit 23:top 23,500:left 23,70:width 23,30 :text 23,0
edit 24:top 24,500:left 24,100:width 24,30:text 24,0
edit 25:top 25,500:left 25,130:width 25,30:text 25,0
edit 26:top 26,500:left 26,160:width 26,30:text 26,0
edit 27:top 27,500:left 27,190:width 27,30:text 27,0
edit 28:top 28,500:left 28,220:width 28,30:text 28,0
edit 29:top 29,500:left 29,250:width 29,30:text 29,0
edit 30:top 30,500:left 30,280:width 30,30:text 30,0
alpha 54:left 54,320:top 54,500:caption 54,"total des retenues"

edit 31:top 31,530:left 31,10:width 31,30 :font_bold 31
edit 32:top 32,530:left 32,40:width 32,30 :font_bold 32
edit 33:top 33,530:left 33,70:width 33,30 :font_bold 33
edit 34:top 34,530:left 34,100:width 34,30:font_bold 34
edit 35:top 35,530:left 35,130:width 35,30:font_bold 35
edit 36:top 36,530:left 36,160:width 36,30:font_bold 36
edit 37:top 37,530:left 37,190:width 37,30:font_bold 37
edit 38:top 38,530:left 38,220:width 38,30:font_bold 38
edit 39:top 39,530:left 39,250:width 39,30:font_bold 39
alpha 55:left 55,320:top 55,530:caption 55,"résultat colonne par colonne"
edit 56:hide 56

edit 51:width 51,300:height 51,30:color 51,255,204,50
edit 52:width 52,500:height 52,30:color 52,255,100,100:hide 52


list 50:left 50,650:width 50,30:height 50,200:color 50,204,255,51:hint 50,"ordre de lecture des colonnes
memo 100:width 100,250:left 100,700:height 100,300
rem afficher les chiffres des nombres
cumul% = 0
for a%=1 to 10
  cumul% = cumul% + nombre%(a%)
  b$=right$("000000000000"+str$(nombre%(a%)),9)
  for b%=1 to 9
      item_add b%,mid$(b$,b%,1):item_add b%,""
  next b%
  b$=right$("        "+str$(nombre%(a%)),9) + right$("        "+str$(cumul%),9)
  item_add 100,b$
next a%
for a%=2 to 9:item_add a%,"":next a%
c$=""

rem faire un choix quelconque du calcul des colonnes
repeat
  a%=rnd(9)
  if instr (c$,str$(a%))=0 and a%>0 then item_add 50,a%:c$=c$+str$(a%)
until count(50)=9 or scancode=27

rem effacer les listes qui n'ont que des zéros
for a%=9 to 1 step -1: ' les colonnes, on regarde si toutes les lignes sont à zéro
  l%=0
  for b%=1 to count(1) step 2:' ligne
      if item_read$( a%,b%)<>"0" then l%=l%+1
  next b%
  if l%=0 then exit_for
next a%

rem les listes effacées, on les retirent pour le calcul
for b%=1 to a%
  clear b%
  for a%=1 to count(50)
      if val(item_read$(50,a%))=b% then item_delete 50,a% :exit_for
  next a%
next b%
message "on commence le calcul de l'addition, selon un ordre aléatoire, celui de la liste verte"
rem on calcule les colonnes au hazard
for col%=1 to count(50)
  if scancode=27 then exit_for
  a%=item_read$(50,col%): color a%,255,255,0
  left 51,left(a%) :left 52,left(a%)
  rem on commence
  cumul%=0: pt%=0
  for b%=1 to count(a%)-1 step 2
      top 51,b%*21-21:top 52,top(51)+21
      nb%=item_read$(a%,b%)
      text 51,str$(nb%)+" + "+str$(cumul%)+" = "+str$(cumul%+nb%)
      cumul%=cumul%+nb%
      if cumul%=>11 then show 52:else:hide 52

      if cumul%=>11
        text 52,str$(cumul%)+" - 11 = " + str$(cumul%-11)+" on marque un point"
        cumul%=cumul%-11:pt%=pt%+1:item_delete a%,b%+1:item_insert a%,b%+1,"*"
        wait 200
      end_if
      repeat:until scancode=0:repeat:until scancode=32 or scancode=27
      if scancode=27 then exit_for
  next b%
  rem  affichage des calculs de la colonne: le résultat et les retenues
  color a%+10,255,255,0:color a%+20,255,0,0
  text a%+10,cumul%
  text a%+20,pt%
  wait 1500:color a%+10,255,255,255:color a%+20,255,255,255

  color a%,255,255,255

  if scancode=27 then exit_for
next col% :hide 51
text 52,"":c$=""
message "maintenant on fait le calcul final"
rem resultat final
cumul%=0 :hide 52  :  show 51
  for a%=9 to 1 step -1
      text 51,"" :hide 52
      if c$<>"" then text 51,"retenu: "+c$+" + "
      color a%+10,0,255,0: left 51,left(a%)+30:top 51,470:text 51, text$(51)+text$(a%+10)+" + "
      repeat:until scancode=0:repeat:until scancode=32
      color a%+20,255,255,0:top 51,500:text 51,text$(51)+text$(a%+20)+" + "
      repeat:until scancode=0:repeat:until scancode=32
      color a%+21,255,0,0  :left 51,left(a%)+60

      cumul%=cumul%+val(text$(a%+10))+val(text$(a%+20))+val(text$(a%+21))
      text 51,text$(51)+ text$(a%+21) + " = " + str$(cumul%)
      color a%+30,204,204,255

      if cumul%<10
        text a%+30,cumul%:cumul%=0:c$=""
      else
        show 52:left 52,left(51):top 52,top(51)+30
        text 56,cumul%
        b$=right$(text$(56),1):c$=left$(text$(56),len(text$(56))-1)
        text a%+30,b$:cumul%=val(c$)
        text 52,"dépassement, on pose:"+b$+" on retient:"+c$
      end_if
      text 56,0
      repeat:until scancode=0:repeat:until scancode=32
      color a%+10,255,255,255:color a%+20,255,255,255:color a%+21,255,255,255:color a%+30,255,255,255
  next a%
  hide 51:hide 52

' contrôle
cumul%=0
for a%=1 to 10
cumul%=cumul%+nombre%(a%)
next a%
item_add 100,"--------------------"
item_add 100,cumul%
message "comparez le résultat du bas, et celui qui vient d'être fait dans la liste de droite"+chr$(13)+"A votre avis? quel est le bon résultat? voyez avec vos calculatrice!"
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyLun 28 Fév 2011 - 22:46

Merci, les grandes idées se rencontrent. J'avais fait la même chose. J'ai changé les nombres pour essayer de voir ligne par ligne.
C'est sur les grands nombres que se produit l'erreur, et c'est pour cela que l'on voit à la fin.
Je ne suis pas un spécialiste des mots, des mots doubles ou autre.
Ceux qui le sont pourraient peut-être faire un rapprochement.

Merci pour ta curiosité.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12277
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyLun 28 Fév 2011 - 23:36

J'y ai pensé, aux limites des mots, mais cela créerait des problèmes "à gauche" par la perte de positions significatives à gauche, ou en passant à des valeurs négatives. Mais on en est encore loin, de ces limites: avec des mots de 32 bits (4 octets) pour un entier, les chiffres que tu utilises devraient passer haut la main. Le mystère reste entier. A moins qu'il y ait un problème de conversion entre représentation binaire et alpha. Mais il y a vraiment un problème.

Et de plus en plus bizarre: si tu fais l'addition de l'avant-dernière somme intermédiaire avec nombre%(10):
item_add 100,8566727+nombre%(10)
tu obtiens bien le BON résultat ! Mais si tu fais
cumul% = 8566727+nombre%(10)
item_add 100,cumul%
le résultat est FAUX ! Le problème vient de la conversion de la valeur en provenance de la variable cumul%, il ne réside pas dans le calcul lui-même ! J'ai ajouté 2 lignes au mémo 100: la première est basée sur la variable cumul% (FAUX), la seconde sur le résultat de l'addition directe (CORRECT), et j'affiche la même chose avec la commande MESSAGE pour exclure un problème avec ITEM_ADD. Le problème est bel et bien lié à l'utilisation de la variable.

Code:

' méthode d'addition

dim nombre%(10) ,a% ,l% ,a$(10)  ,b$ ,c$ ,b% ,col% ,cumul%,pt% ,nb%
data 125735,42572,99233,7846647,86559,46956,124987,38455,155583,28787924
for a%=1 to 10:read nombre%(a%):next a%

width 0,1000:font_size 0,14:font_name 0,"Courier New":height 0,600

list 1:height 1,460:width 1,30:left 1,10
list 2:height 2,460:width 2,30:left 2,40
list 3:height 3,460:width 3,30:left 3,70
list 4:height 4,460:width 4,30:left 4,100
list 5:height 5,460:width 5,30:left 5,130
list 6:height 6,460:width 6,30:left 6,160
list 7:height 7,460:width 7,30:left 7,190
list 8:height 8,460:width 8,30:left 8,220
list 9:height 9,460:width 9,30:left 9,250

edit 11:top 11,470:left 11,10:width 11,30 :text 11,0
edit 12:top 12,470:left 12,40:width 12,30 :text 12,0
edit 13:top 13,470:left 13,70:width 13,30 :text 13,0
edit 14:top 14,470:left 14,100:width 14,30:text 14,0
edit 15:top 15,470:left 15,130:width 15,30:text 15,0
edit 16:top 16,470:left 16,160:width 16,30:text 16,0
edit 17:top 17,470:left 17,190:width 17,30:text 17,0
edit 18:top 18,470:left 18,220:width 18,30:text 18,0
edit 19:top 19,470:left 19,250:width 19,30:text 19,0
alpha 53:left 53,320:top 53,470:caption 53,"total des colonnes"

edit 21:top 21,500:left 21,10:width 21,30 :text 21,0
edit 22:top 22,500:left 22,40:width 22,30 :text 22,0
edit 23:top 23,500:left 23,70:width 23,30 :text 23,0
edit 24:top 24,500:left 24,100:width 24,30:text 24,0
edit 25:top 25,500:left 25,130:width 25,30:text 25,0
edit 26:top 26,500:left 26,160:width 26,30:text 26,0
edit 27:top 27,500:left 27,190:width 27,30:text 27,0
edit 28:top 28,500:left 28,220:width 28,30:text 28,0
edit 29:top 29,500:left 29,250:width 29,30:text 29,0
edit 30:top 30,500:left 30,280:width 30,30:text 30,0
alpha 54:left 54,320:top 54,500:caption 54,"total des retenues"

edit 31:top 31,530:left 31,10:width 31,30 :font_bold 31
edit 32:top 32,530:left 32,40:width 32,30 :font_bold 32
edit 33:top 33,530:left 33,70:width 33,30 :font_bold 33
edit 34:top 34,530:left 34,100:width 34,30:font_bold 34
edit 35:top 35,530:left 35,130:width 35,30:font_bold 35
edit 36:top 36,530:left 36,160:width 36,30:font_bold 36
edit 37:top 37,530:left 37,190:width 37,30:font_bold 37
edit 38:top 38,530:left 38,220:width 38,30:font_bold 38
edit 39:top 39,530:left 39,250:width 39,30:font_bold 39
alpha 55:left 55,320:top 55,530:caption 55,"résultat colonne par colonne"
edit 56:hide 56

edit 51:width 51,300:height 51,30:color 51,255,204,50
edit 52:width 52,500:height 52,30:color 52,255,100,100:hide 52


list 50:left 50,650:width 50,30:height 50,200:color 50,204,255,51:hint 50,"ordre de lecture des colonnes
memo 100:width 100,250:left 100,700:height 100,300
rem afficher les chiffres des nombres
cumul% = 0
for a%=1 to 10
  cumul% = cumul% + nombre%(a%)
  b$=right$("000000000000"+str$(nombre%(a%)),9)
  for b%=1 to 9
      item_add b%,mid$(b$,b%,1):item_add b%,""
  next b%
  b$=right$("        "+str$(nombre%(a%)),9) + right$("        "+str$(cumul%),9)
  item_add 100,b$
next a%
for a%=2 to 9:item_add a%,"":next a%
c$=""
  cumul% = 8566727+nombre%(10)
  item_add 100,cumul%
  item_add 100,8566727+nombre%(10)
  message str$(cumul%)+"=8566727+"+str$(nombre%(10))+chr$(13)+chr$(10)+str$(8566727+nombre%(10))+"=8566727+"+str$(28787924)

rem faire un choix quelconque du calcul des colonnes
repeat
  a%=rnd(9)
  if instr (c$,str$(a%))=0 and a%>0 then item_add 50,a%:c$=c$+str$(a%)
until count(50)=9 or scancode=27

rem effacer les listes qui n'ont que des zéros
for a%=9 to 1 step -1: ' les colonnes, on regarde si toutes les lignes sont à zéro
  l%=0
  for b%=1 to count(1) step 2:' ligne
      if item_read$( a%,b%)<>"0" then l%=l%+1
  next b%
  if l%=0 then exit_for
next a%

rem les listes effacées, on les retirent pour le calcul
for b%=1 to a%
  clear b%
  for a%=1 to count(50)
      if val(item_read$(50,a%))=b% then item_delete 50,a% :exit_for
  next a%
next b%
message "on commence le calcul de l'addition, selon un ordre aléatoire, celui de la liste verte"
rem on calcule les colonnes au hazard
for col%=1 to count(50)
  if scancode=27 then exit_for
  a%=item_read$(50,col%): color a%,255,255,0
  left 51,left(a%) :left 52,left(a%)
  rem on commence
  cumul%=0: pt%=0
  for b%=1 to count(a%)-1 step 2
      top 51,b%*21-21:top 52,top(51)+21
      nb%=item_read$(a%,b%)
      text 51,str$(nb%)+" + "+str$(cumul%)+" = "+str$(cumul%+nb%)
      cumul%=cumul%+nb%
      if cumul%=>11 then show 52:else:hide 52

      if cumul%=>11
        text 52,str$(cumul%)+" - 11 = " + str$(cumul%-11)+" on marque un point"
        cumul%=cumul%-11:pt%=pt%+1:item_delete a%,b%+1:item_insert a%,b%+1,"*"
        wait 200
      end_if
      repeat:until scancode=0:repeat:until scancode=32 or scancode=27
      if scancode=27 then exit_for
  next b%
  rem  affichage des calculs de la colonne: le résultat et les retenues
  color a%+10,255,255,0:color a%+20,255,0,0
  text a%+10,cumul%
  text a%+20,pt%
  wait 1500:color a%+10,255,255,255:color a%+20,255,255,255

  color a%,255,255,255

  if scancode=27 then exit_for
next col% :hide 51
text 52,"":c$=""
message "maintenant on fait le calcul final"
rem resultat final
cumul%=0 :hide 52  :  show 51
  for a%=9 to 1 step -1
      text 51,"" :hide 52
      if c$<>"" then text 51,"retenu: "+c$+" + "
      color a%+10,0,255,0: left 51,left(a%)+30:top 51,470:text 51, text$(51)+text$(a%+10)+" + "
      repeat:until scancode=0:repeat:until scancode=32
      color a%+20,255,255,0:top 51,500:text 51,text$(51)+text$(a%+20)+" + "
      repeat:until scancode=0:repeat:until scancode=32
      color a%+21,255,0,0  :left 51,left(a%)+60

      cumul%=cumul%+val(text$(a%+10))+val(text$(a%+20))+val(text$(a%+21))
      text 51,text$(51)+ text$(a%+21) + " = " + str$(cumul%)
      color a%+30,204,204,255

      if cumul%<10
        text a%+30,cumul%:cumul%=0:c$=""
      else
        show 52:left 52,left(51):top 52,top(51)+30
        text 56,cumul%
        b$=right$(text$(56),1):c$=left$(text$(56),len(text$(56))-1)
        text a%+30,b$:cumul%=val(c$)
        text 52,"dépassement, on pose:"+b$+" on retient:"+c$
      end_if
      text 56,0
      repeat:until scancode=0:repeat:until scancode=32
      color a%+10,255,255,255:color a%+20,255,255,255:color a%+21,255,255,255:color a%+30,255,255,255
  next a%
  hide 51:hide 52

' contrôle
cumul%=0
for a%=1 to 10
cumul%=cumul%+nombre%(a%)
next a%
item_add 100,"--------------------"
item_add 100,cumul%
message "comparez le résultat du bas, et celui qui vient d'être fait dans la liste de droite"+chr$(13)+"A votre avis? quel est le bon résultat? voyez avec vos calculatrice!"

Je pense que les lignes 74 à 77 que j'ai insérées, peuvent aider Jack à trouver le problème.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyMar 1 Mar 2011 - 20:28

Bonsoir !
chose particulière, c'est que si le cumul on l'effectue dans un réel, le résultat est correct.
et pourtant comme le dis Klaus, sur 4 octets cela rentre sans problème


Code:

dim somme
...
' contrôle
cumul%=0
for a%=1 to 10
cumul%=cumul%+nombre%(a%)
next a%
item_add 100,"--------------------"
item_add 100,cumul%
item_add 100,"--------------------"
for a%=1 to 10
  somme = somme + nombre%(a%)
next a%
item_add 100, somme
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyMar 1 Mar 2011 - 21:11

Voici le plus petit code qui montre le problème:
Code:
dim a%
a%=8566727+28787924
print a% : rem incorrect
print 8566727+28787924 : rem correct
print a% ou item_add 100,a% ou caption 0,str$(a%) donnent le même résultat incorrect.

En tout cas, je suis plus qu'abasourdi par ce problème. Je vous tiens au courant.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyMer 2 Mar 2011 - 10:35

Un début d'explication:
Dans PANORAMIC, tous les calculs s'effectuent en réel, même les calculs avec des entiers. Ainsi, lorsqu'on affecte dans une variable entière le résultat d'un calcul, on a le maximum de précision.
Pour cela, une conversion du résultat en entier est effectué pour affecter un nombre entier dans une variable entière.

Dans la ligne:
a%=8566727+28787924
le calcul donne le résultat correct: 37354651, mais avant de ranger ce résultat dans la variable a%, un arrondi est effectué pour obtenir un entier. Dans le cas présent, l'arrondi ne devrait rien changer car le résultat est déjà un entier. Et pourtant cet arrondi retourne la valeur 37354652.
Par conséquent, la valeur affectée à la variable a% est fausse.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
jean_debord

jean_debord


Nombre de messages : 1250
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyMer 2 Mar 2011 - 11:25

Avec le programme suivant, l'erreur se produit lorsqu'on dépasse 2^30 :

Code:

dim i%, a%, x
i% = 0
a% = 1
x = 1
for i% = 1 to 31
  a% = a% * 2
  x = x * 2
  print "2^", i%, " = ", a%, " = ", x
next i%

C'est assez logique pour des entiers codés sur 32 bits : la limite théorique est 2^31 - 1
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
Klaus

Klaus


Nombre de messages : 12277
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyMer 2 Mar 2011 - 17:44

Ah, Jack, là, je suis surpris. J'avais pris l'habitude d'utiliser systématiquement des variables x% si je sais que les valeurs ne peuvent être qu'entières, pensant qu'ainsi, les calculs seraient plus rapides et optimisés. Maintenant, si tu dis que les calculs de font de toute manière en flottant, tout ce raisonnement est faux, et je ferais mieux de tout passer en réel.

Tu montres clairement que le calcul en lui-même est correct. C'est l'affectation à un entier qui pose problème. Cela ne peut pas être dû à un arrondi puisqu'il n'y a pas de décimales. Cela ne peut être causé que par la conversion. La preuve: si l'on affecte dans une variable flottante, le résultat est bon:
Code:
dim a%, a
a%=8566727+28787924
a=8566727+28787924
print a% : rem incorrect
print 8566727+28787924 : rem correct
print a : rem correct
(j'ai élargi ton code, Jack)
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyJeu 3 Mar 2011 - 10:23

Tiens, finalement c'est tout bête mais je n'avais même pas pensé à ça pour arrondir un nombre à l'entier le plus proche (équivalent du CINT en QBasic):
Code:
DIM a, x%

a = 3.1416
x% = a
print x%: ' -> 3 arrondi à l'entier inférieur
a = 3.51232
x% = a
print x%: ' -> 4 arrondi à l'entier supérieur
Revenir en haut Aller en bas
Invité
Invité




faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyJeu 3 Mar 2011 - 10:39

Oui c'est tout bête.

J'ai remarqué une chose, cela ne peut pas être des arrondis. J'ai refait une liste de nombre, et pris individuellement par ligne, le résultat donne des écarts pas toujours de +1
Code:
dim nombre%(10) ,a% ,cumul%
data 1257935,9424572,8799233,78466471,8556559,46123956,12495487,3845599,15558347,287879248
memo  1 :full_space 1:font_size 1,14

for a%=1 to 10
  read nombre%(a%)  :cumul%=cumul%+nombre%(a%)
  item_add 1,str$(nombre%(a%)) +"  --  "+str$(cumul%)
next a%
ce qui donne:
Citation :

1257935 -- 1257935
9424572 -- 10682507 bon
8799233 -- 19481740 bon
78466472 -- 97948208 résultat: 97948212 soit +4
8556559 -- 106504768 résultat: 106504767 soit -1
46123956 -- 152628720 résultat: 152628724 soit -4
12495487 -- 165124208 résultat: 165124207 soit +1
3845599 -- 168969808 résultat: 168969807 soit +1
15558347 -- 184528160 résultat: 184528155 soit +5
287879232 -- 472407392 bon
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12277
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyJeu 3 Mar 2011 - 14:32

C'est très curieux. Voici un tableau avec les précisions des types de variables DELPHI:
Citation :
Type Storage size Range

Byte 1 0 to 255
ShortInt 1 -127 to 127
Word 2 0 to 65,535
SmallInt 2 -32,768 to 32,767
LongWord 4 0 to 4,294,967,295
Cardinal 4* 0 to 4,294,967,295
LongInt 4 -2,147,483,648 to 2,147,483,647
Integer 4* -2,147,483,648 to 2,147,483,647
Int64 8 -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

Single 4 7 significant digits, exponent -38 to +38
Currency 8 50+ significant digits, fixed 4 decimal places
Double 8 15 significant digits, exponent -308 to +308
Extended 10 19 significant digits, exponent -4932 to +4932

* Note : the Integer and Cardinal types are both 4 bytes in size at present (Delphi release 7), but are not guaranteed to be this size in the future. All other type sizes are guaranteed.

Jack utilise certainement "Double" pour les flottants, et "LongInt" ou "Integer" pour les entiers. Mais alors, le nombre de chiffres significatifs est largement suffisant pour accepter les nombres des exemples donnés ici, et l'anomalie ne s'explique que par un problème de conversion, pour moi. En tout cas, ça ressemble à un vrai bug.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyJeu 3 Mar 2011 - 14:41

Voici un petit test édifiant :

Code:
dim reel,entier%
list 1 : width 1,200
for reel=0.5 to 10.5
  entier%=reel
  item_add 1,"reel:"+str$(reel)+" -> entier :"+str$(entier%)
next reel

Notez que l'on obtiens que des chiffres pairs...

scratch

Pour la petite histoire : Wink

Le crash du vol 501 d'Ariane en 1996, qui a coûté quelques 500 millions de dollars : (excusez du peu...) Wink
L'origine du problème s'est avérée être une erreur de programmation dans le système de référence inertielle. Plus précisément, un flottant 64 bits donnant la vitesse horizontale de la fusée était converti en entier signé sur 16 bits. Or l'entier obtenu étant plus grand que 32767, le plus grand entier représentable sur 16 bits, la conversion échouait, déclenchant une exception non traitée. Le plus drôle ; si l'on peut dire ; dans cette histoire est que tous les tests logiciels avaient été réussis, mais ils avaient été effectués avec les données d'Ariane 4, fusée moins puissante et donc moins rapide qu'Ariane 5, pour laquelle la vitesse horizontale restait inférieure au maximum de 32767 !

Heureusement que l'on en est pas encore là.... Wink

Pour ceux qui veulent un peu de lecture, il y a plein de petites anecdotes:
http://hal.inria.fr/docs/00/07/14/77/PDF/RR-5105.pdf
- voir implémentation de la fonction rint (page 40)
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Invité
Invité




faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyJeu 3 Mar 2011 - 17:57

C'est bien de parler de la fusée Ariane. Tu veux m'envoyer dans le cosmos? Very Happy

Citation :
Je ne connais pas la méthode du gâteau (?)
faudra que tu me l'explique un de ces jours...
Donc j'ai tenu parole, et je me suis lancé malgré que je risquais de me faire chambrer.
Mais vu ce que j'ai découvert, je ne regrette pas d'avoir fait ce programme. C'est un bug important, et pas facile de s'en rendre compte. Qui prend la peine de tout vérifier avec une calculette?
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyJeu 3 Mar 2011 - 18:29

Nardo je croyais bien ne plus jamais entendre parler de virgule flottante, et voilà qu'elle revient me hanter...
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyJeu 3 Mar 2011 - 19:40

Voila, le bug a été compris et résolu. Je vais sortir une version instantanée avec la correction.

Ce problème était effectivement un problème de conversion. Lorsqu'après un calcul, le résultat est converti en entier par un arrondi pour le mettre dans une variable entière, la procédure de conversion qui était appelée, n'était pas la procédure de la bibliothèque mathématique, mais un homonyme dans la bibliothèque graphique qui sert à transformer une coordonnée dans l'espace 3D (X, Y, Z) en un nombre de pixels pour affichage dans le SCENE3D.

Cette procédure de la bibliothèque graphique qui convertit un réel en entier est ultra-rapide (3 instructions en assembleur) mais la conversion se fait au détriment de la précision: le résultat est approché, car on néglige les fractions de pixel lors de l'affichage d'un objet 3D dans un SCENE3D.
(en effet, dans notre exemple, une erreur de conversion de 1 sur 37354651 est négligeable pour un affichage, mais est très important pour un calcul arithmétique).

Ce bug est corrigé mais il m'a fait transpirer car j'ai cherché longtemps ce qui pouvait bien se passer.
Je n'en reviens pas que je puisse avoir des fonctions homonymes dans le source et que ce soit accepté à la compilation. Je vais faire la chasse à ce type de situation.
Autre chose pour les versions futures: dans les tests qui sont effectués avant la sortie d'une version, je vais ajouter des tests intensifs de calcul arithmétique. Jusqu'à présent, toutes les fonctions étaient testées, mais avec toujours les mêmes valeurs.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: re   faire une addition - Je ne sais plus faire une addition!! EmptyJeu 3 Mar 2011 - 20:44

Bravo Jack !

je vais me mettre 2 ou 3 coup de pied au ...
pour me donner du courage et replonger
dans mon petit programme de tables.

cheers cheers cheers cheers
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12277
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyJeu 3 Mar 2011 - 23:22

Je vais plagier Ygeronimi: Bravo, Jack !

A l'évidence, ce n'était pas facile à trouver, et je rends hommage à ta ténacité dans cette situation. Par le passé, tu nous a déjà montré un aperçu de cette qualité, qui se confirme une fois de plus. On ne peut que se féliciter de pouvoir utiliser un produit dont le créateur est à ce point engagé et réactif.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyVen 4 Mar 2011 - 10:36

C'est grace à vous tous qui signalez des bugs que PANORAMIC gagne en qualité à chaque correction d'un bug.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyVen 4 Mar 2011 - 12:56

Bravo Jack !
Surtout que comme tu le dis, parfois il n'est pas évident de trouver là où ça coince...
Perso, ça fait un petit moment que je me prend la tête sur un pb d'application bankée sur micro DG128A qui plante méchamment en it SWI (chose qui ne devrait jamais arriver!) alors qu'en pas à pas tout fonctionne à merveille... scratch
pas de pb de pile, de sauvegarde/restitution de contexte, reste que le scheduler d'actif avec juste une petite tache pour réarmer le watchdog de tps en tps... bref, une belle mer#$ à débugger... Wink

Merci également à cosmos, qui, grâce à sa méthode "gateau" a soulevé ce problème !!!

@JL35: attention ! ils flottent tous en bas.... faire une addition - Je ne sais plus faire une addition!! Smiley_clown

Smile
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyVen 4 Mar 2011 - 13:43

Pour les curieux, les lignes "fautives" sont 3 instructions en assembleur qui convertissent un réel en entier:
Code:
      FLD    valeur
      FISTP  DWORD PTR [valeur]
      MOV    EAX, [valeur]
FLD empile un réel
FISTP dépile et convertit le réel en un entier, mais la précision de la conversion est définie par une configuration des bits 10 et 11 d'un registre de commande du FPU (processeur flottant)
Et la précision n'était pas optimale...
A la deuxième ligne, "valeur" sert de variable "tampon" pour minimiser le nombre de lignes


Dernière édition par Jack le Ven 4 Mar 2011 - 13:58, édité 2 fois
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! EmptyVen 4 Mar 2011 - 13:45

Je joins mes congratulations aux autres, effectivement ça n'avait rien d'évident.
Revenir en haut Aller en bas
Contenu sponsorisé





faire une addition - Je ne sais plus faire une addition!! Empty
MessageSujet: Re: Je ne sais plus faire une addition!!   faire une addition - Je ne sais plus faire une addition!! Empty

Revenir en haut Aller en bas
 
Je ne sais plus faire une addition!!
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
»  Deux questions d’éthique
» je ne sais plus me servir des sprites
» je ne sais plus remplacer des morceaux de string
» réflexion sur addition de chaîne
» addition d'entiers avec des réels

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Les inutilitaires-
Sauter vers: