BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
30 juin 2004 à 17:57
cs_dragon
Messages postés2336Date d'inscriptionsamedi 14 juillet 2001StatutMembreDernière intervention 5 mai 2009
-
30 juin 2004 à 21:17
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 30 juin 2004 à 17:57
ok si ce n'est appele qu'1 fois de temps en temps sinon temps de calcul redhibitoire dans une grosse boucle.
Si qlqun veut lui assembler la version en hyper rapide (EB par exemple...), je l'ai fait va impec:
-------------------------------
.model flat, stdcall
option casemap :none
option prologue:none
option epilogue:none
30 juin 2004 à 21:17
Round = ((Num * NbDec) \ 1) / NbDec
mais tu réutilise la variable NbDec
30 juin 2004 à 21:06
(on peut tout passer en Double)
carement pas d'accord pour la division par 0 !!! (10^0 = 1)
30 juin 2004 à 20:54
30 juin 2004 à 20:42
30 juin 2004 à 20:32
un gros default dans ton code :
Public Function Round(chiffre As Double, décimal As Integer) As Double
chiffre = chiffre * (10 ^ décimal)
tu modifie un des parametres d'entrée (passé par reference par defaut)
pour faire ca juste en VB, tu pourrais simplement faire :
(ca tronques, ca arrondi a rien du tout...)
Public Function Round(Num As Long, ByVal NbDec As Long) As Long
NbDec = (10 ^ NbDec)
Round = ((Num * NbDec) \ 1) / NbDec
End Function
30 juin 2004 à 19:10
BruNews, tiens ça fais un bout
30 juin 2004 à 19:07
bnRound PROC pdbl:DWORD
mov eax, [esp+4]
fld qword ptr[eax]
fistp dword ptr[esp+4]
mov eax, [esp+4]
ret 4
bnRound ENDP
30 juin 2004 à 17:57
Si qlqun veut lui assembler la version en hyper rapide (EB par exemple...), je l'ai fait va impec:
-------------------------------
.model flat, stdcall
option casemap :none
option prologue:none
option epilogue:none
.code
LibMain PROC hInstDLL:DWORD, reason:DWORD, unused:DWORD
mov eax, 1
ret 12
LibMain ENDP
bnRound PROC pdbl:DWORD
mov eax, [esp+4]
fld qword ptr[eax]
frndint
push eax
fistp dword ptr[esp]
pop eax
ret 4
bnRound ENDP
End LibMain
---------------------------
ce qui donne une DLL de 2.5 Ko
Utilisation depuis VB/VBA, test fait sur Excel:
Declare Function bnRound Lib "D:\RndAsm.dll" (pdbl As Double) As Long
Sub tesRound()
Dim d As Double
d = 3.547
Debug.Print bnRound(d)
End Sub