PureBasic

Forums PureBasic
Nous sommes le Mer 18/Sep/2019 14:41

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 10 messages ] 
Auteur Message
 Sujet du message: Obtenez-vous les mêmes résultats que moi ?
MessagePosté: Mar 13/Oct/2015 10:36 
Hors ligne

Inscription: Sam 23/Fév/2008 17:58
Messages: 556
Bonjour à tous

Avant de poster sur le forum anglais je voudrais savoir si vous obtenez les mêmes résultats que moi.
La bizarrerie est dans le passage par une variable intermédiaire pour obtenir un résultat.

Code:
Macro _q_t_
"
EndMacro
Macro _n (__n)
_q_t_#__n#=_q_t_+Str(__n)+" "
EndMacro
Procedure.d Fact(n.l)
  EnableASM
  FINIT
  FLDZ
   ;si n négatif pas de combinaisons
   TEST dword [p.v_n], $80000000
   JNE fact_end
  FLD1 ;résultat dans st0
   ;si n inférieur à p pas de combinaisons
  !FACT_loop:
   ;tant que n > 0
   CMP dword [p.v_n], 0
   JLE fact_end_loop
 
   ;calcule les combinaisons
   FIMUL dword [p.v_n]
   DEC dword [p.v_n]
   JMP FACT_loop
   !fact_end_loop:
   FRNDINT
   !fact_end:
   RET 4
   DisableASM
EndProcedure
val.d=1000
For i=1 To 5
  Debug val/fact(i)
  res.d=val/fact(i); malgré des valeurs positives réelles le résultat est toujours ZERO
  factd.d=fact(i) ; il faut  passer par une variable intermédiaire pour obtenir un résultat
    Debug _n(fact(i))+_n(val/fact(i))+_n(res)+_n(factd)+_n(val/factd)
Next


A+

_________________
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Obtenez-vous les mêmes résultats que moi ?
MessagePosté: Mar 13/Oct/2015 11:02 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3518
Localisation: Sourans
PB 5.40 b9 Seven Pro 64 bits

En x86

Citation:
0.0
fact(i)=1 val/fact(i)=0 res=0 factd=1 val/factd=1000
0.0
fact(i)=2 val/fact(i)=0 res=0 factd=2 val/factd=500
0.0
fact(i)=6 val/fact(i)=0 res=0 factd=6 val/factd=167
0.0
fact(i)=24 val/fact(i)=0 res=0 factd=24 val/factd=42
0.0
fact(i)=120 val/fact(i)=0 res=0 factd=120 val/factd=8


en 64 bits ca plante ligne 28 'accès mémoire invalide' à l'adresse 0


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Obtenez-vous les mêmes résultats que moi ?
MessagePosté: Mar 13/Oct/2015 11:09 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1655
Localisation: Belgique
PB 5.40 B10 X86

Code:
0.0
fact(i)=1 val/fact(i)=0 res=0 factd=1 val/factd=1000
0.0
fact(i)=2 val/fact(i)=0 res=0 factd=2 val/factd=500
0.0
fact(i)=6 val/fact(i)=0 res=0 factd=6 val/factd=167
0.0
fact(i)=24 val/fact(i)=0 res=0 factd=24 val/factd=42
0.0
fact(i)=120 val/fact(i)=0 res=0 factd=120 val/factd=8



Pb 5.31 X86
Code:
0.0
fact(i)=1 val/fact(i)=0 res=0 factd=1 val/factd=1000
0.0
fact(i)=2 val/fact(i)=0 res=0 factd=2 val/factd=500
0.0
fact(i)=6 val/fact(i)=0 res=0 factd=6 val/factd=167
0.0
fact(i)=24 val/fact(i)=0 res=0 factd=24 val/factd=42
0.0
fact(i)=120 val/fact(i)=0 res=0 factd=120 val/factd=8


_________________
Windows 10 64 bits PB: 5.70 ; 5.71 beta 2


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Obtenez-vous les mêmes résultats que moi ?
MessagePosté: Mar 13/Oct/2015 12:35 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 12/Sep/2015 10:31
Messages: 45
Localisation: Allemagne
Hi PAPIPP,
En utilisant ton code (en Linux), je reçois les mêmes résultats comme Denis et microdevweb.

Mais quand j'utilise val.l et res.l [long !] je reçois ce résultat:
Citation:
1000.0
fact(i)=1 val/fact(i)=1000 res=1000 factd=1 val/factd=1000
500.0
fact(i)=2 val/fact(i)=500 res=500 factd=2 val/factd=500
166.6666666666666571927635232
fact(i)=6 val/fact(i)=167 res=167 factd=6 val/factd=167
41.6666666666666642981908808
fact(i)=24 val/fact(i)=42 res=42 factd=24 val/factd=42
8.3333333333333339254522798
fact(i)=120 val/fact(i)=8 res=8 factd=120 val/factd=8

_________________
Faites-moi savoir, s'il vous plaît, si mon français n'est pas assez compréhensible. ~ merci ~
Le texte encadré est d'un traducteur.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Obtenez-vous les mêmes résultats que moi ?
MessagePosté: Mar 13/Oct/2015 17:57 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6650
Localisation: Isere
W7 v5.23 X86
Citation:
0.0
fact(i)=1 val/fact(i)=0 res=0 factd=1 val/factd=1000
0.0
fact(i)=2 val/fact(i)=0 res=0 factd=2 val/factd=500
0.0
fact(i)=6 val/fact(i)=0 res=0 factd=6 val/factd=167
0.0
fact(i)=24 val/fact(i)=0 res=0 factd=24 val/factd=42
0.0
fact(i)=120 val/fact(i)=0 res=0 factd=120 val/factd=8

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Obtenez-vous les mêmes résultats que moi ?
MessagePosté: Mar 13/Oct/2015 18:29 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 4066
Citation:
0.0
fact(i)=1 val/fact(i)=0 res=0 factd=1 val/factd=1000
0.0
fact(i)=2 val/fact(i)=0 res=0 factd=2 val/factd=500
0.0
fact(i)=6 val/fact(i)=0 res=0 factd=6 val/factd=167
0.0
fact(i)=24 val/fact(i)=0 res=0 factd=24 val/factd=42
0.0
fact(i)=120 val/fact(i)=0 res=0 factd=120 val/factd=8


win 7 x86

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Obtenez-vous les mêmes résultats que moi ?
MessagePosté: Mar 13/Oct/2015 22:12 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8750
W10 x64 - PB 5.31 x86

Code:
0.0
fact(i)=1 val/fact(i)=0 res=0 factd=1 val/factd=1000
0.0
fact(i)=2 val/fact(i)=0 res=0 factd=2 val/factd=500
0.0
fact(i)=6 val/fact(i)=0 res=0 factd=6 val/factd=167
0.0
fact(i)=24 val/fact(i)=0 res=0 factd=24 val/factd=42
0.0
fact(i)=120 val/fact(i)=0 res=0 factd=120 val/factd=8


_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Obtenez-vous les mêmes résultats que moi ?
MessagePosté: Mer 14/Oct/2015 6:04 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2172
Localisation: 50200 Coutances
Bonjour PAPIPP,

W10 x64 - PB 5.40 LTS Béta 10 x86

même résultat que les autres.

_________________
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Obtenez-vous les mêmes résultats que moi ?
MessagePosté: Mer 14/Oct/2015 8:27 
Hors ligne

Inscription: Sam 23/Fév/2008 17:58
Messages: 556
Bonjour à tous
Et merci à tous de vos réponses.


@Denis
Je n’ai pas PB64bits et je ne peux donc pas le tester mais je pense que c’est le retour ret 4 qui plante
Il y aurait une différence d’algo entre PB 32bits et PB 64bits.
J’ai modifié le programme avec un retour en PB peut-être que cela fonctionnera mieux.

Code:
Macro _q_t_
"
EndMacro
Macro _n (__n)
_q_t_#__n#=_q_t_+Str(__n)+" "
EndMacro
Procedure.d Fac(n.l)
  EnableASM
  FINIT
  FLDZ
   ;si n négatif pas de combinaisons
   TEST dword [p.v_n], $80000000
   JNE fact_end1
  FLD1 ;1 dans st0
  ;si n = 0 pas de combinaisons
  CMP dword [p.v_n], 0
   JLE fact_end1
  !@@:
   ;calcule les combinaisons
   FIMUL dword [p.v_n]
   DEC dword [p.v_n]
      ;tant que n > 0
   JNZ @b
   !fact_end1:
   DisableASM
   ProcedureReturn
EndProcedure

Procedure.d Fact(n.l)
  Protected retd.d
  EnableASM
  FINIT
  FLDZ
   ;si n négatif pas de combinaisons
   TEST dword [p.v_n], $80000000
   JNE fact_end
  FLD1 ;1 dans st0
  ;si n = 0 pas de combinaisons
  CMP dword [p.v_n], 0
   JLE fact_end_loop
  !FACT_loop:
   ;calcule les combinaisons
   FIMUL dword [p.v_n]
   DEC dword [p.v_n]
      ;tant que n > 0
   JNZ FACT_loop
   !fact_end_loop:
   !fact_end:
   FSTP qword [p.v_retd]
   DisableASM
   ProcedureReturn  retd
EndProcedure

val.d=1000
For i=0 To 5
  res.d=val/fact(i); malgré des valeurs positives réelles le résultat est toujours ZERO ou 1
  factd.d=fact(i) ; il faut  passer par une variable intermédiaire pour obtenir un résultat
  Debug _n(fact(i))+_n(val/fact(i))+_n(res)+_n(factd)+_n(val/factd)+_n(i)
    res.d=val/fac(i); malgré des valeurs positives réelles le résultat est toujours ZERO ou 1
  facd.d=fac(i) ; il faut  passer par une variable intermédiaire pour obtenir un résultat
  Debug _n(fac(i))+_n(val/fac(i))+_n(res)+_n(facd)+_n(val/facd)

Next


Mais on a toujours des résultats bizarres.

@Vera
Merci de cet essai qui permet de forcer la conversion en .long ce qui donne des résultats corrects.
Mais limités par une plage de -2147483648 à +2147483647 et si on les définit en .q la plage est de
-9223372036854775808 à +9223372036854775807 mais nous avons perdu le format scientifique propre a la définition des nombres réels.
Et de toute manière il y a une bizarrerie dans la gestion de sortie des nombres réels.

Code:
Macro _q_t_
"
EndMacro
Macro _n (__n)
_q_t_#__n#=_q_t_+Str(__n)+" "
EndMacro
Procedure.d Fact(n.l)
  EnableASM
  FINIT
  FLDZ
   ;si n négatif pas de combinaisons
   TEST dword [p.v_n], $80000000
   JNE fact_end
  FLD1 ;résultat dans st0
   ;si n inférieur à p pas de combinaisons
  !FACT_loop:
   ;tant que n > 0
   CMP dword [p.v_n], 0
   JLE fact_end_loop
 
   ;calcule les combinaisons
   FIMUL dword [p.v_n]
   DEC dword [p.v_n]
   JMP FACT_loop
   !fact_end_loop:
;    FRNDINT
   !fact_end:
   DisableASM
   ProcedureReturn
EndProcedure
val.d=1000
For i=1 To 5
  Debug val/fact(i)
  res.d=val/fact(i); malgré des valeurs positives réelles le résultat est toujours ZERO
  factd.d=fact(i) ; il faut  passer par une variable intermédiaire pour obtenir un résultat
    Debug _n(fact(i))+_n(val/fact(i))+_n(res)+_n(factd)+_n(val/factd)
  Next
Debug " avec vall.l et resl.l tout devient correct !!!!"
vall.q=1000  ;; avec une definition .l ou .q les résultats sont corrects
For i=1 To 5
  Debug vall/fact(i)
  resl.q=vall/fact(i);;;; ; avec une definition .l ou .q les résultats sont exacts
  factd.d=fact(i) ;
    Debug _n(fact(i))+_n(vall/fact(i))+_n(resl)+_n(factd)+_n(vall/factd)
Next 


Tout ceci pour remarquer que les prg suivants somme et pi en double réel fonctionnent correctement !!!


Code:
Macro _q_t_
"
EndMacro
Macro _n (__n)
_q_t_#__n#=_q_t_+Str(__n)+" "
EndMacro
Procedure.d PI_Double()
   !FLDPI
;    !ret
   ProcedureReturn
EndProcedure
Procedure.d somme(a.d,b.d)
  ProcedureReturn (a+b)
EndProcedure
vald.d=1000
Debug _d(pi_double())+_d(vald/pi_double())
som.d=5
For i=0 To 5
  som+somme(2,i)
  Debug _n(i)+_n(som)+_n(vald/somme(i,5))
Next


Il y a bien un pb dans la gestion des retours en nombre réel Peut-être est-ce mon prg qui n’est pas correct ? Mais je ne vois pas pourquoi.

A+

_________________
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Obtenez-vous les mêmes résultats que moi ?
MessagePosté: Mer 14/Oct/2015 9:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2172
Localisation: 50200 Coutances
Toujour W10 x64 - PB LTS 5.40 x86

Résultats :
fact(i)=1 val/fact(i)=0 res=0 factd=1 val/factd=1000 i=0
fac(i)=1 val/fac(i)=0 res=0 facd=1 val/facd=1000
fact(i)=1 val/fact(i)=0 res=0 factd=1 val/factd=1000 i=1
fac(i)=1 val/fac(i)=0 res=0 facd=1 val/facd=1000
fact(i)=2 val/fact(i)=0 res=0 factd=2 val/factd=500 i=2
fac(i)=2 val/fac(i)=0 res=0 facd=2 val/facd=500
fact(i)=6 val/fact(i)=0 res=0 factd=6 val/factd=167 i=3
fac(i)=6 val/fac(i)=0 res=0 facd=6 val/facd=167
fact(i)=24 val/fact(i)=0 res=0 factd=24 val/factd=42 i=4
fac(i)=24 val/fac(i)=0 res=0 facd=24 val/facd=42
fact(i)=120 val/fact(i)=0 res=0 factd=120 val/factd=8 i=5
fac(i)=120 val/fac(i)=0 res=0 facd=120 val/facd=8

_________________
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 10 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 8 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye