Re-bonjour,
Je viens d'éffectuer de nouveaux essais...
Voici *mon code en C* :
---
void main(void)
{
long *pA ;
long A[11] ;
float *pB ;
int i ;
A[0] = 0x40000000L ; // 2.0
A[1] = 0x40D00000L ; // 6.5
A[2] = 0xC0D00000L ; // -6.5
A[3] = 1 ; // 2^-149 = 1.40129e-45
A[4] = 0 ; // +0
A[5] = 0x80000000L ; // -0
A[6] = 0x7FC00001L ; // NaN ; avec 0x7F800001L l'affichage provoque
un plantage
A[7] = 0xFFC00000L ; // -NaN ; avec 0xFF800001L l'affichage provoque
un plantage
A[8] = 0x7F800000L ; // +Infini
A[9] = 0xFF800000L ; // -Infini
A[10] = 0x7F7FFFFFL ; // 2^127 * (2-2^-23) = 3,40282e+38
clrscr() ;
for(i=0 ; i<11 ; i++)
{
pA = A+i ;
pB = (float*)pA ;
printf("%2d **%g**\n", i, *pB) ;
}
getch() ;
}
---
Il fonctionne comme je l'attends, les nombres sont bien représentés
selon la norme ANSI/IEEE754. Malgré cela, en C, je suis incapable de
faire des calculs jusqu'à 1.40129e-45...
Bien sûr, j'ai essayé de transformer *mon code pour OOo-Basic*...
Mais je ne sais pas faire...
---
Sub TestFloat
Dim A(0 to 10) As Variant
Dim B As Single
Dim i As Integer
A(0) = &H40000000 ' 2.0
A(1) = &H40D00000 ' 6.5
A(2) = &HC0D00000 ' -6.5
A(3) = 1 ' 2^-149 = 1.40129e-45
A(4) = 0 ' +0
A(5) = &H80000000 ' -0
A(6) = &H7FC00000 ' NaN ; avec 0x7F800001L
A(7) = &HFFC00000 ' -NaN ; avec 0xFF800001L
A(8) = &H7F800000 ' +Infini
A(9) = &HFF800000 ' -Infini
A(10) = &H7F7FFFFF ' 2^127 * (2-2^-23) = 3,40282e+38
For i=0 To 10 Step 1
B=A(i)
' OOo-Basic convertit l'entier en réel... ce n'est pas ce que
' je cherche !!! Je voudrais qu'il copie bit à bit les 32 bits
' de mon entier pour afficher la valeur en tant que Single...
print "A["&(i)&"] : ", A(i), "**", B, "**"
Next
End Sub
--
Pierre
Utilisateur d'OpenOffice.org, Thunderbird, Firefox, Nvu,...
--
Vive la liberté !
Merci à tous les contributeurs des projets libres.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]