Voila j'utilise dans un code une procedure Combinaisons / C(n,p):
(sans doute issue du forum, je n'ai pas retrouve le post si tel est le cas)
Code : Tout sélectionner
Procedure.d Combinations(n.l, p.l)
;si n négatif pas de combinaisons
!TEST dword [p.v_n], $80000000
!JNE l_combinations_end
;si p négatif pas de combinaisons
!TEST dword [p.v_p], $80000000
!JNE l_combinations_end
;si n inférieur à p pas de combinaisons
!MOV eax, dword [p.v_n]
!CMP eax, dword [p.v_p]
!JL l_combinations_end
!FLD1 ;résultat dans st0
;si p > n/2
!SHR eax, 1
!CMP eax, dword [p.v_p]
!JG l_combinations_loop
;on prend n - p à la place de p
!MOV eax, dword [p.v_n]
!SUB eax, dword [p.v_p]
!MOV dword [p.v_p], eax
combinations_loop:
;tant que p > 0
!CMP dword [p.v_p], 0
!JLE l_combinations_end_loop
;calcule les combinaisons
!FIMUL dword [p.v_n]
!FIDIV dword [p.v_p]
!DEC dword [p.v_n]
!DEC dword [p.v_p]
!JMP l_combinations_loop
combinations_end_loop:
!FRNDINT
combinations_end:
!RET 8
EndProcedure
Dans mon utilisation de cette procedure, il arrive parfois que les valeurs p ou n données fournissent un resultat negatif ou donnant "-1.#IND".
Comment modifier le code ASM pour avoir comme resultat 0, si le calcul ne donne pas une resultante positive ?
Merci à tous