arrondi ...

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
jerexgrz
Messages : 279
Inscription : dim. 05/juin/2005 20:27

arrondi ...

Message par jerexgrz »

quand on divise par ex: (valeurs reelles)
480 / 32 = 15
478 / 32 = 14.93
464 / 32 = 14.5
460 / 32 = 14.375

Serait il possible que la division renvoie un arrondi plus pres :
comme ca : (valeurs arrondies)
480 / 32 = 15
478 / 32 = 15
464 / 32 = 14 ou 15 (suivant le mode choisi)
460 / 32 = 14

et pourrait on avoir plus de choix dans les arrondis avec Round! Merci.
Sehka
Messages : 114
Inscription : dim. 27/févr./2005 11:41

Message par Sehka »

Salut Jerexgrz,
Voici un petit bout de code qui peut t'aider :wink:

Code : Tout sélectionner

Procedure.f GetFloatRounded(Value.f,nbDecimal.l,Rounded.f)
  Protected pFactor.l
  Protected pSgn.l
  pSgn = Sgn(Value)
  Value = Abs(Value)
  pFactor =Pow(10,nbDecimal)
  Result.f = pSgn*Int((Value*pFactor)+Rounded)/pFactor
  ProcedureReturn Result
EndProcedure

Debug "GetFloatRounded  Upper 0.5 : " + StrF(GetFloatRounded(464 / 32 ,0,0.5))
Debug "GetFloatRounded  Lower 0.5 : " + StrF(GetFloatRounded(464 / 32 ,0,-0.5))
Par contre si quelqu'un maîtrise l'assembleur, il pourrait surement réaliser une fonction optimisée et rapide :idea:
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

il y a une discussion intéressante à ce sujet sur le forum anglais.
personne n'y a trouvé LA solution mais çà peut donner des idées.

http://www.purebasic.fr/english/viewtop ... ight=round
Image
jerexgrz
Messages : 279
Inscription : dim. 05/juin/2005 20:27

Message par jerexgrz »

*sehka ! Merci je vais regarder ca !

:idea:
Autrement un autre bon truc à ajouter (option) dans le debugger, ce serait de visualiser un tableau de cette maniere (c + visuel!):
00,10,20,30,00
00,10,00,00,10
10,00,20,30,00
00,10,10,10,00
Comme ca, on voit immediatement la colonne, la ligne et le resultat.

:idea:
Par exemple, quand on a une structure avec un tableau à l'interieur du style source (cf ex), ce serait bien de ne pas afficher son contenu dans le debugger. Sinon, avoir la possibilite d'afficher seulement les variables qu'on a besoin. EX: j'ai besoin de connaitre la valeur de source mais pas de X ou de Y.

structure pt1
x.l
y.l
source.l [10]
endstructure
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Message par tonton »

deux instructions SSE2 sont specialisé pour ca...

Code : Tout sélectionner

x1.f = 14.322 
x2.f = 14.522 
arrondi1.l
arrondi2.l

!cvttss2si eax,[v_x1]  ; (conversion du flotant en entier avec troncature des décimales) 
!mov [v_arrondi1],eax  

!cvtss2si eax,[v_x2]  ; (conversion du flotant en entier le plus proche) 
!mov [v_arrondi2],eax 

        
Debug arrondi1 ; 14
Debug arrondi2 ; 15
Sehka
Messages : 114
Inscription : dim. 27/févr./2005 11:41

Message par Sehka »

:oops: , je viens de voir une coquille de ma part, j'ai oublié la fonction suivante :

Code : Tout sélectionner

Procedure Sgn(x.l) 
  ProcedureReturn (x > 0 Or #False) - (x < 0 Or #False) 
EndProcedure 
Répondre