Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Basic > PureBasic
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/04/2011, 00h03   #1
Responsable Purebasic
 
Avatar de comtois
 
Inscription : avril 2003
Messages : 810
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 810
Points : 1 856
Points : 1 856
Par défaut Un bogue de direct3D provoque des erreurs de calcul

Dans le code qui suit, x1 et xx1 devrait être identique, puisque les équations sont identiques. Pourtant ce n'est pas le cas sous windows, ceci à cause de Direct3D qui modifie le FPU à l'initialisation. Or Les commandes OpenScreeen() et OpenWindowedScreen() utilisent Direct3D.

Ce bogue est connu. Voir par exemple ce lien

J'ai testé avec mon système 64 bits sous seven, alors avec la version 64 bits de PureBasic, c'est ok, pas d'erreur, par contre il y a bien une différence de valeur avec la version 32 bits. Dans le second code, j'obtiens les bonnes valeurs.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
t.d = 0
x1.d = t + ParseDate("%yyyy/%mm/%dd %hh:%ii:%ss", "2021/01/01 17:02:01")
 
InitSprite()
 
OpenWindow(0, 0, 0, 300, 200, "Test", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 300, 200, 0, 0, 0)
 
u.d = 0
xx1.d = u + ParseDate("%yyyy/%mm/%dd %hh:%ii:%ss", "2021/01/01 17:02:01")
 
Debug x1
Debug xx1
Heureusement il existe une solution pour y pallier :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
; At start of program
FPU_ControlWord.w
!fstcw [v_FPU_ControlWord]
 
t.d = 0
x1.d = t + ParseDate("%yyyy/%mm/%dd %hh:%ii:%ss", "2021/01/01 17:02:01")
 
InitSprite()
 
OpenWindow(0, 0, 0, 300, 200, "Test", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 300, 200, 0, 0, 0)
 
; After buggy DirectX function
!fldcw [v_FPU_ControlWord]
 
u.d = 0
xx1.d = u + ParseDate("%yyyy/%mm/%dd %hh:%ii:%ss", "2021/01/01 17:02:01")
 
Debug x1
Debug xx1
__________________
Vous souhaitez participer à la rubrique PureBasic (tutoriels, FAQ, sources) ? Contactez-moi par MP.
comtois est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h54.


 
 
 
 
Partenaires

Hébergement Web