je passe le retour en double et sa passe.Procedure.q CalulateOffset1D(RowMax.u, LineID.u, RowID.u)
If LineID = 0 And RowID = 0
Offset1D.q = 0
ElseIf RowID > 0
Offset1D = RowID + LineID * RowMax
ElseIf LineID > 0
Offset1D = LineID * RowMax
EndIf
ProcedureReturn Offset1D
EndProcedure
Système de Calculs Matriciels général (V1.0.1)
Re: Système de Calculs Matriciels général (V0.9.7)
le problème viens de là :
Re: Système de Calculs Matriciels général (V0.9.7)
Ouais ben là y a un très sérieux problème puisque cette fonction doit impérativement retourner un entier et non une valeur réelle.
Si tu fais un test avec la procédure ci-dessus, ça donne quoi ?
A+
Guimauve
Code : Tout sélectionner
Procedure.l CalulateOffset1D(RowMax.u, LineID.u, RowID.u)
If LineID = 0 And RowID = 0
Offset1D.l = 0
ElseIf RowID > 0
Offset1D = RowID + LineID * RowMax
ElseIf LineID > 0
Offset1D = LineID * RowMax
EndIf
ProcedureReturn Offset1D
EndProcedure
A+
Guimauve
Re: Système de Calculs Matriciels général (V0.9.7)
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Random Matrix
[-0.425, -3.373, -5.582, -7.909, -6.178]
[0.718, 7.159, 3.089, -0.439, 2.268]
[-7.067, 2.831, 7.407, -5.260, -0.067]
[-4.581, -3.366, -4.376, 3.406, -1.625]
[3.182, -1.894, -2.277, -4.376, 5.771]
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Random Matrix Diagonal
-0.4248000000000000109245946
7.158599999999999852207111
7.4070000000000000284217094
3.4056000000000001826094831
5.770800000000000373745479
[-0.425]
[7.159]
[7.407]
[3.406]
[5.771]
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF DEMONSTRATION <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Re: Système de Calculs Matriciels général (V0.9.7)
Bon, c'est le résultat que l'on attend.
Cela implique donc que les limites de la matrice ne sont pas de 65535 X 65535 mais bien inférieur. Quelque chose comme 16383×16383×8 = 2147221512 si la quantité de mémoire le permet.
Merci à toi pour avoir trouvé le problème, je vais revenir à la limite de 16383×16383 comme grandeur maximale pour les matrices. Limite que je trouve un peu basse en passant.
A+
Guimauve
Cela implique donc que les limites de la matrice ne sont pas de 65535 X 65535 mais bien inférieur. Quelque chose comme 16383×16383×8 = 2147221512 si la quantité de mémoire le permet.
Merci à toi pour avoir trouvé le problème, je vais revenir à la limite de 16383×16383 comme grandeur maximale pour les matrices. Limite que je trouve un peu basse en passant.
A+
Guimauve
Dernière modification par Guimauve le jeu. 18/août/2011 21:15, modifié 1 fois.
Re: Système de Calculs Matriciels général (V0.9.7)
Guimauve a écrit :Bon, c'est le résultat que l'on attend.
Cela implique donc que les limites de la matrice n'est pas de 65535 X 65535 mais bien inférieur. Quelque chose comme 16383×16383×8 = 2147221512 si la quantité de mémoire le permet.
Merci à toi pour avoir trouvé le problème, je vais revenir à la limite de 16383×16383 comme grandeur maximale pour les matrices. Limite que je trouve un peu basse en passant.
A+
Guimauve
Ça fait de sacré matrice tout de même, même pour le traitement d'image je doute d'utilisé des matrices de cette taille

Re: Système de Calculs Matriciels général (V0.9.7)
Et bien l'idée est de fixer les limites tellement loin que personnes ne puisse les atteindre. Bien évidemment cela dépend sur quoi l'on travaille et du nombre d'équations à résoudre simultanément.
En passant, j'ai mis à jour l'archive.
A+
Guimauve
En passant, j'ai mis à jour l'archive.
A+
Guimauve
Re: Système de Calculs Matriciels général (V0.9.9)
Bonjour.
Tout Fonctionne bien maintenant, pour la taille limite des matrices c'est amplement suffisant.
Merci G-Rom & Guimauve.
Tout Fonctionne bien maintenant, pour la taille limite des matrices c'est amplement suffisant.
Merci G-Rom & Guimauve.
Re: Système de Calculs Matriciels général (V0.9.9)
Bonjour,
Sur Mac, le programme ne marche pas. J'obtiens ce message d'erreur à la compilation:
http://imageshack.us/photo/my-images/23 ... .png[/img]
Uploaded with ImageShack.us
J'ai essayé pas mal de choses, avec les options du compilateur, mais j'obtiens toujours le même message.
PureBasic version 4.60 Beta 3 // Mac Os X version 10.6.8
Sur Mac, le programme ne marche pas. J'obtiens ce message d'erreur à la compilation:
http://imageshack.us/photo/my-images/23 ... .png[/img]
Uploaded with ImageShack.us
J'ai essayé pas mal de choses, avec les options du compilateur, mais j'obtiens toujours le même message.

PureBasic version 4.60 Beta 3 // Mac Os X version 10.6.8
Re: Système de Calculs Matriciels général (V0.9.9)
Bon apparemment il semble y avoir un problème avec les instructions en assembleur sous la plate-forme MAC.
Étant donnée que je n'ai pas de machine Mac OS, je ne peux pas faire des tests. En revanche, en remplaçant le codes de calculs des matrices de rotation par celui-ci :
Ça devrait fonctionner. Si quelqu'un à une solution pour faire passer les instructions ASM sous Mac OS, je suis prenneur.
A+
Guimauve
Étant donnée que je n'ai pas de machine Mac OS, je ne peux pas faire des tests. En revanche, en remplaçant le codes de calculs des matrices de rotation par celui-ci :
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< RotateX 3D Operator <<<<<
Procedure RotateXMatrix3D(*RotateX.Matrix, Theta.d)
Protected Cos.d, Sin.d
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
!FLD qword [p.v_Theta]
!FSINCOS
!FSTP qword [p.v_Cos]
!FSTP qword [p.v_Sin]
CompilerCase #PB_OS_Windows
!FLD qword [p.v_Theta]
!FSINCOS
!FSTP qword [p.v_Cos]
!FSTP qword [p.v_Sin]
CompilerCase #PB_OS_MacOS
Cos.d = Cos(Theta)
Sin.d = Sin(Theta)
CompilerEndSelect
IdentityMatrix(*RotateX, 4)
; <<<<<<<<<<<<<<<<<<<<
; <<<<< Ligne 2 <<<<<<
PokeMatrixElement(*RotateX, 1, 1, Cos)
PokeMatrixElement(*RotateX, 1, 2, -Sin)
; <<<<<<<<<<<<<<<<<<<<
; <<<<< Ligne 3 <<<<<<
PokeMatrixElement(*RotateX, 2, 1, Sin)
PokeMatrixElement(*RotateX, 2, 2, Cos)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Le mutateur pour le RotateY 3D <<<<<
Procedure RotateYMatrix3D(*RotateY.Matrix, Theta.d)
Protected Cos.d, Sin.d
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
!FLD qword [p.v_Theta]
!FSINCOS
!FSTP qword [p.v_Cos]
!FSTP qword [p.v_Sin]
CompilerCase #PB_OS_Windows
!FLD qword [p.v_Theta]
!FSINCOS
!FSTP qword [p.v_Cos]
!FSTP qword [p.v_Sin]
CompilerCase #PB_OS_MacOS
Cos.d = Cos(Theta)
Sin.d = Sin(Theta)
CompilerEndSelect
IdentityMatrix(*RotateY, 4)
; <<<<<<<<<<<<<<<<<<<<
; <<<<< Ligne 1 <<<<<<
PokeMatrixElement(*RotateY, 0, 0, Cos)
PokeMatrixElement(*RotateY, 0, 2, Sin)
; <<<<<<<<<<<<<<<<<<<<
; <<<<< Ligne 3 <<<<<<
PokeMatrixElement(*RotateY, 2, 0, -Sin)
PokeMatrixElement(*RotateY, 2, 2, Cos)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Le mutateur pour le RotateZ 3D <<<<<
Procedure RotateZMatrix3D(*RotateZ.Matrix, Theta.d)
Protected Cos.d, Sin.d
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
!FLD qword [p.v_Theta]
!FSINCOS
!FSTP qword [p.v_Cos]
!FSTP qword [p.v_Sin]
CompilerCase #PB_OS_Windows
!FLD qword [p.v_Theta]
!FSINCOS
!FSTP qword [p.v_Cos]
!FSTP qword [p.v_Sin]
CompilerCase #PB_OS_MacOS
Cos.d = Cos(Theta)
Sin.d = Sin(Theta)
CompilerEndSelect
IdentityMatrix(*RotateZ, 4)
; <<<<<<<<<<<<<<<<<<<<
; <<<<< Ligne 1 <<<<<<
PokeMatrixElement(*RotateZ, 0, 0, Cos)
PokeMatrixElement(*RotateZ, 0, 1, -Sin)
; <<<<<<<<<<<<<<<<<<<<
; <<<<< Ligne 2 <<<<<<
PokeMatrixElement(*RotateZ, 1, 0, Sin)
PokeMatrixElement(*RotateZ, 1, 1, Cos)
EndProcedure
A+
Guimauve
Re: Système de Calculs Matriciels général (V0.9.9)
Bonjour Guimauve,
Merci pour votre réponse, apparemment je n'ai plus d'erreur de compilation, mais j'ai une autre erreur car il doit manquer une procédure:
Erreur ligne 723:
PokeMatrixElement() is not a fonction, array, macro or linked list ...
Merci pour votre réponse, apparemment je n'ai plus d'erreur de compilation, mais j'ai une autre erreur car il doit manquer une procédure:
Erreur ligne 723:
PokeMatrixElement() is not a fonction, array, macro or linked list ...
Re: Système de Calculs Matriciels général (V0.9.9)
Oups,
J'ai oublié que j'ai remplacé les macro Private_SetMatrixElement() et Private_GetMatrixElement() par les macros PokeMatrixElement() et PeekMatrixElement()
D'ici à ce que l'archive soit mise à jour.
Désolé.
A+
Guimauve
J'ai oublié que j'ai remplacé les macro Private_SetMatrixElement() et Private_GetMatrixElement() par les macros PokeMatrixElement() et PeekMatrixElement()
D'ici à ce que l'archive soit mise à jour.
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Poke Peek Matrix Element <<<<<
Macro PokeMatrixElement(MatrixA, P_Line, P_Row, P_Element)
PokeD(ReachMatrixElement(MatrixA, CalulateOffset1D(GetMatrixRow(MatrixA), P_Line, P_Row)), P_Element)
EndMacro
Macro PeekMatrixElement(MatrixA, P_Line, P_Row)
PeekD(ReachMatrixElement(MatrixA, CalulateOffset1D(GetMatrixRow(MatrixA), P_Line, P_Row)))
EndMacro
A+
Guimauve
Re: Système de Calculs Matriciels général (V0.9.9)
Ne soyez pas désolé, c'est moi qui vous remercie de vous pencher sur le problème.
Problème d'ailleurs résolu à mon avis, car cette fois-ci le programme de demo fonctionne sans problème.
Je vois que le Mac pose certains problèmes avec PureBasic, mais avec le temps ça devrai se résorber et il faut dire que la communauté Mac sur le forum FR n'est pas immense.
Merci pour le partage.
Problème d'ailleurs résolu à mon avis, car cette fois-ci le programme de demo fonctionne sans problème.
Je vois que le Mac pose certains problèmes avec PureBasic, mais avec le temps ça devrai se résorber et il faut dire que la communauté Mac sur le forum FR n'est pas immense.
Merci pour le partage.

Re: Système de Calculs Matriciels général (V1.0.1)
L'archive viens d'être mise à jour. Voir le premier message pour le lien de téléchargement.
A+
Guimauve
A+
Guimauve